Skip to content

fix: line filters whose text is not UTF-8 answer like Loki - #1236

Merged
szibis merged 7 commits into
mainfrom
docs/line-filter-invalid-utf8-case
Nov 9, 2026
Merged

szibis merged 7 commits into
mainfrom
docs/line-filter-invalid-utf8-case

Conversation

@szibis

@szibis szibis commented Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

A |= or != line filter whose text is not UTF-8 (|= "\xff\xfe") now answers like Loki instead of 400.

  • Loki matches |=/!= as bytes, so it accepts these queries. The proxy wrote the substring as a VictoriaLogs regexp, which VictoriaLogs refuses to compile ("invalid UTF-8"), so log and metric queries answered 400.
  • Every ingestion API (Loki push, OTLP, VictoriaLogs JSON lines) carries UTF-8 text, so no stored line holds such bytes, and the exact answer needs no VictoriaLogs filter:
    • |= with such a text keeps no line (_stream_id:in(), the proxy's existing match-no-rows filter);
    • != keeps every line (no filter);
    • an or chain keeps its valid alternatives.
  • One builder (translate.TextLineFilter) serves the translator and the plan lowering. Valid texts keep their exact LogsQL.
  • Loki's text error body is now valid UTF-8, with one U+FFFD per invalid byte, as Loki writes it. |~ "\xff" was already 400 on both sides, but the proxy echoed the raw bytes.
  • _stream_id:in() is now one translate node, shared with the detected_level matcher. A live capability test (TestVLCapability_EmptyInMatchesNothing, run by the version matrix) gates it: it must keep no row for log and stats queries.
  • The VictoriaLogs oracle no longer skips invalid-UTF-8 rows (the skip fix(translate): IPv4 ip() line filters match the addresses Loki matches #1234 added).

Proof vs Loki (compose stack, Loki 3.7, VictoriaLogs v1.53.0)

Query Loki proxy (main) proxy (PR)
{probe} |= "\xff\xfe" 200, 0 lines 400 200, 0 lines
{probe} != "\xff" 200, all lines 400 200, all lines
{probe} |= "\xff" or " b" 200, 2 lines 400 200, 2 lines (equal)
{probe} |~ "\xff" 400, U+FFFD per byte 400, raw bytes 400, byte-identical to Loki
sum(count_over_time({probe} |= "\xff\xfe" [5m])) instant 200 400 200, equal to Loki
  • TestCompat_LineFilterInvalidUTF8LikeLoki, TestCompat_IPLineFilterLikeLoki and TestCompat_LineFilterOrAlternatives pass against Loki on the stack.
  • TestVLCapability_EmptyInMatchesNothing passes on VictoriaLogs v1.53.0 (stack) and v1.49.0 (a standalone container).

API data-to-data match vs Loki on this case: 0% → 100% (status, lines, metric value, error bytes). Open differences from Loki: 86 → 85 (regenerated README).

Visual proof: none. Grafana cannot show the case, because no stored line holds non-UTF-8 bytes, so both panels show the same empty or full set (visual_reason in the case).

Plan / oracles

  • TestPlanShadow: native 624 of 22,842 rows × 12 profiles, 0 mismatches. The lowering equals the translator on the new rows.
  • TestVLOracle on the 28,663-row corpus, v1.49.0 and v1.53.0: passes with the invalid-UTF-8 skip removed. The new rows read as app:="…" _stream_id:in() and app:="…".
  • Route parity and the plan ratchets are unchanged.

Performance

Apple M5 Pro, GOMAXPROCS=4, -count 6, benchstat, base = origin/main with the same benchmark files.

Benchmark base ns/op PR ns/op Δ base B/op PR B/op base allocs PR allocs
TranslateLogQL_LineFilter (valid |=/!=/|~) 7.566µ 7.475µ −1.2% 2.607Ki 2.608Ki 35 35
TranslateLogQL_LineFilterInvalidUTF8 6.733µ 6.633µ ~ 2.528Ki 2.530Ki 39 36
TranslateLogQL_Simple (control) 2.554µ 2.489µ ~ 932.5 933.0 23 23
WriteLokiErrorBody/valid 242.0n 244.4n ~ 1.031Ki 1.031Ki 10 10
WriteLokiErrorBody/invalid_utf8 242.0n 453.5n +87% 1.047Ki 1.141Ki 10 11
LineFilterQueriesTranslator (corpus) 8.914µ 8.229µ −7.7%¹ 5.507Ki 5.249Ki 101 97
LineFilterQueriesLowered (corpus) 3.254µ 3.167µ ~¹ 5.154Ki 4.919Ki 98 94
  • Valid line filters and valid error bodies are unchanged: the UTF-8 check allocates nothing.
  • The +87% on WriteLokiErrorBody/invalid_utf8 is the rare path where an error text quotes invalid bytes: one extra 212 ns and one allocation per such 400.
  • ¹ The corpus benchmarks run on the corpus's lowered line-filter queries. The PR corpus has this case's rows, which are cheaper (no regexp), so that delta is a different query set, not a speedup.
  • Unit tests: go test -short ./internal/proxy peak RSS 3.6 GB under GOMEMLIMIT=3GiB.

Registry

New and changed rows (pending: true until owner review):

conformance/registry/cases/semantics/line-filter-invalid-utf8.yaml (open → fixed):

id: semantics/line-filter-invalid-utf8
title: A |= or != line filter whose text is not UTF-8 answers like Loki (fixed)
pending: true
proves:
  - loki_api_v1_query_range
  - loki_api_v1_query
consumer: api
why: |
  LogQL string escapes can write bytes that are not UTF-8: `|= "\xff\xfe"`.
  Loki matches a `|=` or `!=` filter as bytes, so it accepts the query and
  answers it: `|=` keeps the lines that hold those bytes, `!=` the others.
  The proxy wrote the substring match as a VictoriaLogs regexp of the quoted
  literal, which VictoriaLogs refuses to compile ("invalid UTF-8"), so the
  proxy answered 400 "failed to parse the log query" for the log query and
  the metric query alike (stack, 2026-11-09).

  `|~ "\xff"` is rejected by both with 400, but Loki writes each invalid
  byte of the quoted regexp as U+FFFD, and the proxy wrote the raw bytes.

  Fixed: a stored line is valid UTF-8 (VictoriaLogs and Loki's push API both
  keep text), so a text that is not UTF-8 is held by no line. A `|=` filter
  with such a text matches no line (`_stream_id:in()`), a `!=` filter keeps
  every line (no filter), and in an `or` chain only the valid alternatives
  are kept; valid literals keep their exact VictoriaLogs text. Every error
  text the proxy writes in Loki's text shape is valid UTF-8, one U+FFFD per
  invalid byte, as Loki's.
request:
  method: GET
  path: /loki/api/v1/query_range
  params:
    query: '{app="ipprobe-t"} |= "\xff\xfe"'
    start: 'now-15m'
    end: 'now'
  headers:
    X-Scope-OrgID: "0"
compare:
  mode: observed
  fields: [status]
  expect: |
    200 with no line (no stored line holds the bytes), as Loki answers; `!=`
    200 with every line; `|~ "\xff"` 400 with Loki's text byte for byte.
gap:
  status: fixed
  impact: edge
  effort: M
  area: 'internal/translate linefilter.go (TextAlternatives, NoTextFilter, LineFilter); internal/translator line filters; internal/proxy http_utils.go writeLokiErrorBody'
  loki: 'line filters |= and != match bytes; error text is valid UTF-8 (U+FFFD per invalid byte)'
  proxy: 'match-none for |= and no filter for != when the text is not UTF-8; U+FFFD per invalid byte in error text'
  planned_test: 'TestCompat_LineFilterInvalidUTF8LikeLoki (test/e2e-compat, group core); TestTranslateLineFilterInvalidUTF8; TestInvalidUTF8RegexpErrorTextLikeLoki'
  fixed_by: '#1236'
  visual: none
  visual_reason: 'Grafana cannot show the case: no stored line holds bytes that are not UTF-8, so the panels of Loki and the proxy are the same empty or full set; proven by TestCompat_LineFilterInvalidUTF8LikeLoki against Loki (status, lines, metric values and the 400 text)'
  clusters: []

conformance/registry/vl/capabilities/vl-empty-in-matches-nothing.yaml (new):

id: vl-empty-in-matches-nothing
kind: version_gated_capability
since: v1.49
generated:
  used_in: 0

description: |
  `_stream_id:in()`, an in() filter with an empty list, matches no row and is
  not an error: a query that ANDs it with a selector of a stream that holds
  lines answers HTTP 200 with no line, and `| stats count()` over it answers
  0. TestVLCapability_EmptyInMatchesNothing requires both on a live stream,
  and runs in the vl-pinned check and the version matrix.
proxy_usage: |
  The proxy writes it (translate matchNoRows, the translator's matchNoRows)
  where Loki's answer is known to hold no line: a detected_level stream
  matcher that no stream can satisfy, and a |= line filter whose text is not
  UTF-8 (no stored line holds such bytes). If it matched rows, those queries
  would return lines Loki never returns.
fallback: |
  None on a supported version; a release that changed it would fail the live
  test before the version is supported.
proves: []

Decision in conformance/registry/behaviours/architecture-syntax-package-layering.yaml (new):

  - id: line-filter-text-not-utf8
    chosen: 'A |= or != line filter whose text is not UTF-8 is answered from the fact that no stored line holds such bytes: translate.TextLineFilter writes `|=` as match-none (`_stream_id:in()`), `!=` as no filter, and an `or` chain as the regexp of its valid alternatives; the translator and the lowering share it, and valid texts keep their exact LogsQL. Loki''s text error body is written as valid UTF-8, one U+FFFD per invalid byte, as Loki writes it'
    over: ['writing each invalid byte as \x{FFFD} in the VictoriaLogs regexp (a superset that matches lines holding U+FFFD)', 'evaluating the filter on rows in the proxy', 'strings.ToValidUTF8 (one U+FFFD per run, not per byte as Loki)']
    why: |
      VictoriaLogs refuses to compile a regexp with bytes that are not UTF-8,
      so the proxy answered 400 where Loki answers 200. Every ingestion API
      (Loki push, OTLP, VictoriaLogs JSON lines) carries UTF-8 text, so Loki's
      byte match of such a text never matches a stored line: the exact answer
      needs no VictoriaLogs filter at all. Loki's 400 text for `|~ "\xff"`
      quotes the regexp with U+FFFD per byte (stack, Loki 3.7, 2026-11-09).
    evidence: 'TestCompat_LineFilterInvalidUTF8LikeLoki against Loki on the compose stack (|= 200 no line, != 200 every line, or chain 200 with 2 lines, |~ 400 with Loki''s bytes, metric instant equal); TestPlanShadow native 624 of 22,842 rows × profiles, 0 mismatches; TestVLOracle on the 28,663-row corpus, v1.49.0 and v1.53.0, with the invalid-UTF-8 skip removed; TestVLCapability_EmptyInMatchesNothing (the match-no-rows filter keeps no row, log and stats) on VictoriaLogs v1.49.0 and v1.53.0 (2026-11-09)'
    code: [internal/translate/linefilter.go, internal/translator/translator.go, internal/queryplan/lower/lower.go, internal/proxy/http_utils.go]
    tests: [TestCompat_LineFilterInvalidUTF8LikeLoki, TestVLCapability_EmptyInMatchesNothing, TestTranslateLineFilterInvalidUTF8, TestInvalidUTF8RegexpErrorTextLikeLoki, TestValidUTF8Text, FuzzErrorBodyShapes, TestPlanShadow, TestVLOracle]
    quality: 'semantics/line-filter-invalid-utf8 fixed: the log query, the metric query and the error text answer like Loki.'
    performance:
      tracked: ['BenchmarkTranslateLogQL_LineFilter / BenchmarkTranslateLogQL_LineFilterInvalidUTF8 (internal/translator), BenchmarkWriteLokiErrorBody (internal/proxy) ns/op, B/op, allocs/op']
      bound: 'M5 Pro, GOMAXPROCS=4, count=6, 2026-11-09: valid line filters unchanged (7.48 µs, 2.6 KiB, 35 allocs; base 7.57 µs, 35 allocs); invalid-UTF-8 filters 6.63 µs, 36 allocs (base 6.73 µs, 39 allocs, then rejected by VictoriaLogs); valid error body unchanged (244 ns, 10 allocs), an invalid-UTF-8 error body 454 ns, 11 allocs (base 242 ns, 10)'

Security

  • The != no-filter case drops only that line filter. The stream selector, the tenant (AccountID, extra_stream_filters) and every other stage still apply; the e2e != returned only the probe stream's lines.
  • |= uses the existing match-no-rows filter, which is now gated on every supported VictoriaLogs version by a live test. A release where _stream_id:in() matched rows would fail CI rather than return lines.
  • No new input reaches VictoriaLogs. Invalid bytes are no longer sent in a regexp at all.
  • Error text is always valid UTF-8; no backend text is added to it.

Tests

  • Unit:
    • TestTranslateLineFilterInvalidUTF8 (log, metric, chains);
    • 4 lowering cases;
    • TestInvalidUTF8RegexpErrorTextLikeLoki (exact Loki bytes through the handler);
    • TestValidUTF8Text;
    • FuzzErrorBodyShapes, whose frontend shape now expects U+FFFD per byte (20 s fuzz clean).
  • e2e:
    • TestCompat_LineFilterInvalidUTF8LikeLoki (core group);
    • TestVLCapability_EmptyInMatchesNothing (vl-pinned and the version matrix).
  • go test -short passes for internal/proxy, translate, translator, queryplan/... and querycorpus. preflight --quick: 16 of 16 passed. The conformance gate is OK.

…lid-utf8-case

# Conflicts:
#	conformance/registry/generated/census.json
#	conformance/registry/query-plan.json
#	conformance/reports/census.md
A |= with a text that is not UTF-8 keeps no line, a != keeps every line,
and an or chain keeps its valid alternatives, since no stored line holds
such bytes; VictoriaLogs rejected the regexp, so the proxy answered 400.
Loki's text error body is written as valid UTF-8, one U+FFFD per invalid
byte, as Loki writes it.
One translate node for _stream_id:in(), shared by the detected_level
matcher and the line filters, and a live capability test that it keeps no
row for log and stats queries, run by the version matrix.
@github-actions github-actions Bot added size/XL Extra large change scope/translator LogQL translator scope/proxy Proxy core scope/docs Documentation scope/tests Tests documentation Documentation labels Nov 9, 2026
@szibis szibis changed the title docs(conformance): register line filters whose text is not UTF-8 fix: line filters whose text is not UTF-8 answer like Loki Nov 9, 2026
@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

PR Quality Report

Compared with the PR base commit; measurements below are scoped to their linked run.

Base dddbe51 → PR c5a9bfb; tested merge b6a5b59.

Focus signals:

  • Check quality / head: failure. run
  • Check quality / report: failure. run
  • quality: completed / failure. run
  • Query semantics catalog: 123 cases, 12 parser × depth paths, 55 exact metric-point contracts, 2 ranked-step contracts, 49 exact log-entry contracts, 0 performance-only scenarios; declared coverage, not a live pass count. run
  • Pinned Loki query matrix: 123 passed, 0 failed, 0 skipped cases observed in CI. run
  • Base test/coverage collection unavailable; no comparison inferred.
  • Head test/coverage collection unavailable; no comparison inferred.
  • Synthetic handlers: no comparable paired metrics; no improvement inferred. run
  • A/B selected workload: 448 same; 0 new and 23 pre-existing Loki answer differences. run
  • Above 2× Loki: 0 new, 0 worsened, 2 known, 0 cleared, 0 locked, 0 lost below. run
  • Visual proof: 37 captures, 0 failures, 0 missing, 1 improved, 1 warnings. run
  • Check ci / test-shard (1): in_progress. run

Additional affected checks are listed below.

Main-versus-PR whole-process CPU, peak RSS, physical SSD throughput/IOPS and per-layer evictions are not measured here. Synthetic allocations and fleet cache occupancy do not substitute for them.

Evidence sources and revision status
Source State Result Link Notes
quality completed failure run
ci pending pending / unavailable run
perf completed success run
visual completed success run
catalog completed success —
drilldown completed success run
loki completed success run
security completed success run
vl completed success run

Pending, stale, unavailable and skipped sources contribute no measurements.

Query semantics catalog: base versus PR

Declared query cases and parser paths in the base and PR source. These counts do not claim execution or parity; the Loki compatibility check supplies live proof.

Signal Base PR Delta
Registered cases 123 123 +0
Tracked operations 25 25 +0
Parser × depth paths 12 12 +0
Exact metric-point contracts 55 55 +0
Tie-tolerant ranked-step contracts 2 2 +0
Exact log-entry contracts 49 49 +0
Expected client errors 12 12 +0
Expected server errors 0 0 +0
Performance scenario definitions 50 50 +0
Performance scenarios reusing quality cases 50 50 +0
Performance-only scenarios 0 0 +0

The matrix is the query catalog for quality and later performance scenarios. Visual evidence remains separate.

Live pinned Loki result Passed Failed Skipped
Matrix cases 123 0 0

Failing case IDs: none.

Broader API and Grafana execution scopes

Existing CI job logs, verified against the tested revision. Candidate only: these scopes have no paired base run here. Go counts include top-level cases and subtests; repeated identities count once and a failed repeat stays failed. Playwright invocations remain separate. Do not sum profiles as independent API coverage. Failed jobs can contain only partial observed populations.

CI source / scope Evidence Passing Failing Skipped Go pass parent / child Flaky / interrupted / not run Logged stack / note
drilldown / drilldown-grafana-pr-matrix (12.4.14, previous_smoke, true, 2.6.0, ^(TestGrafanaDatasourceCatalog... available 49 0 0 3 / 46 not recorded LOKI_IMAGE=grafana/loki:3.7.9, VICTORIALOGS_IMAGE=victoriametrics/victoria-logs:v1.53.0, GRAFANA_IMAGE=grafana/grafana:12.4.14, PROXY_IMAGE=loki-vl-proxy:compat-drilldown
drilldown / drilldown-grafana-pr-matrix (13.3.0, current_smoke, true, ^(TestGrafanaDatasourceCatalogAndHealth... available 49 0 0 3 / 46 not recorded LOKI_IMAGE=grafana/loki:3.7.9, VICTORIALOGS_IMAGE=victoriametrics/victoria-logs:v1.53.0, GRAFANA_IMAGE=grafana/grafana:13.3.0, PROXY_IMAGE=loki-vl-proxy:compat-drilldown
drilldown / drilldown-pinned-runtime available 1 0 0 1 / 0 not recorded LOKI_IMAGE=grafana/loki:3.7.9, VICTORIALOGS_IMAGE=victoriametrics/victoria-logs:v1.53.0, GRAFANA_IMAGE=grafana/grafana:13.3.0, PROXY_IMAGE=loki-vl-proxy:compat-drilldown
loki / loki-pinned available 170 0 0 28 / 142 not recorded LOKI_IMAGE=grafana/loki:3.7.9, VICTORIALOGS_IMAGE=victoriametrics/victoria-logs:v1.53.0, GRAFANA_IMAGE=grafana/grafana:13.3.0, PROXY_IMAGE=loki-vl-proxy:compat-loki
vl / vl-pinned available 5 0 0 5 / 0 not recorded LOKI_IMAGE=grafana/loki:3.7.9, VICTORIALOGS_IMAGE=victoriametrics/victoria-logs:v1.53.0, GRAFANA_IMAGE=grafana/grafana:13.3.0, PROXY_IMAGE=loki-vl-proxy:compat-vl

Showing 5/5 scopes; source links are above.

Real workload A/B: base, PR and Loki

Selected shape × range × Loki profile rows; not the complete workload baseline.

Profile / shape / range Base cold / warm p50 PR cold / warm p50 / p95 Loki cold / warm p50 Result vs Loki
aligned / B1 sum by over rate divided by a literal / 1h 31 ms / 7 ms 24 ms / 7 ms / 7 ms 309 ms / 40 ms same; same
aligned / B2 sum by over a ratio of two per-stream metrics / 1h 563 ms / 68 ms 576 ms / 73 ms / 75 ms 90087 ms / 90087 ms (HTTP 0) differs; same
aligned / B4 outer sum over ignoring(machine) / 1h 169 ms / 25 ms 148 ms / 21 ms / 22 ms 807 ms / 134 ms same; same
loki-defaults / B1 sum by over rate divided by a literal / 1h 29 ms / 7 ms 21 ms / 7 ms / 7 ms 191 ms / 32 ms same; same
loki-defaults / B2 sum by over a ratio of two per-stream metrics / 1h 563 ms / 62 ms 587 ms / 63 ms / 80 ms 12718 ms / 447 ms differs; same
loki-defaults / B3 sum over a literal times count, instant / instant 18 ms / 30 ms 21 ms / 27 ms / 40 ms 24 ms / 47 ms same; same
loki-defaults / B4 outer sum over ignoring(machine) / 1h 141 ms / 21 ms 150 ms / 22 ms / 22 ms 640 ms / 97 ms same; same
aligned / json volume no filters / 1h 277 ms / 41 ms 263 ms / 41 ms / 43 ms 1055 ms / 88 ms same; same
aligned / logfmt volume / 1h 233 ms / 10 ms 222 ms / 10 ms / 12 ms 1316 ms / 78 ms same; same
aligned / plain volume / 1h 20 ms / 7 ms 18 ms / 6 ms / 7 ms 710 ms / 46 ms same; same
aligned / stream-label count by app / 1h 62 ms / 9 ms 59 ms / 9 ms / 11 ms 707 ms / 49 ms same; same
aligned / ungrouped rate / 1h 127 ms / 10 ms 126 ms / 10 ms / 14 ms 731 ms / 125 ms same; same
aligned / bytes_over_time by app / 1h 113 ms / 8 ms 111 ms / 9 ms / 10 ms 761 ms / 90 ms same; same
aligned / topk rate by app / 1h 19 ms / 21 ms 26 ms / 18 ms / 18 ms 750 ms / 87 ms same; same
aligned / detected_level volume / 1h 89 ms / 8 ms 87 ms / 9 ms / 11 ms 737 ms / 53 ms same; same
aligned / drilldown level volume / 1h 14 ms / 6 ms 18 ms / 6 ms / 6 ms 687 ms / 40 ms same; same
aligned / drilldown service landing / 1h 35 ms / 8 ms 31 ms / 8 ms / 9 ms 687 ms / 41 ms same; same
aligned / drilldown detected_level / 1h 76 ms / 10 ms 77 ms / 9 ms / 10 ms 708 ms / 52 ms same; same
aligned / json rate by level (no filter, no drop) / 1h 7 ms / 41 ms (HTTP 400) 29 ms / 18 ms / 27 ms (HTTP 400) 196 ms / 207 ms (HTTP 400) same; same
aligned / logfmt count by level, filter, drop / 1h 444 ms / 14 ms 442 ms / 12 ms / 13 ms 1175 ms / 67 ms same; same

Showing 20/448 rows; full details remain in the linked A/B artifact/comment. † Loki's cache answered cold; not a computed cold comparison. Not-like-for-like rows are not speedup proof.

Profile / shape / range VL sampled max CPU, base VL sampled max CPU, PR VL sampled max CPU, Loki pass
aligned / B1 sum by over rate divided by a literal / 1h 80.63% 80.63% 80.63%
aligned / B2 sum by over a ratio of two per-stream metrics / 1h 88.85% 80.63% 88.85%
aligned / B4 outer sum over ignoring(machine) / 1h 54.46% 54.46% 54.46%
loki-defaults / B1 sum by over rate divided by a literal / 1h 98.87% 98.87% 98.87%
loki-defaults / B2 sum by over a ratio of two per-stream metrics / 1h 98.87% 98.87% 89.28%
loki-defaults / B3 sum over a literal times count, instant / instant 52.12% 52.12% 52.12%
loki-defaults / B4 outer sum over ignoring(machine) / 1h 52.12% 52.12% 52.12%
aligned / json volume no filters / 1h 101.68% 101.68% 101.68%
aligned / logfmt volume / 1h 87.38% 87.38% 87.38%
aligned / plain volume / 1h 7.22% 7.22% 7.22%
aligned / stream-label count by app / 1h 23.15% 23.15% 23.15%
aligned / ungrouped rate / 1h 46.78% 46.78% 46.78%

Docker CPU percentages sampled within ±1.5s of each request, maximum across that row's runs. Overlapping work and background activity can contribute; these are not query-attributable CPU seconds. This summary's zero may also mean missing samples.

Visual proofs and regressions

Failures: none
Missing captures: none
See the linked Visual smoke source for main / PR / Loki montages, targeted fixes and general controls. Pixel changes alone are warnings, not compatibility proof.

CI regression checks
Source / check State Result
quality / head completed failure
quality / report completed failure
ci / test-shard (1) in_progress unavailable
ci / bench completed success
ci / docker completed success
ci / e2e-compat completed success
ci / e2e-compat (core) completed success
ci / e2e-compat (drilldown) completed success
ci / e2e-compat (otel-edge) completed success
ci / e2e-compat (semantics) completed success
ci / e2e-compat (tail-multitenancy) completed success
ci / e2e-fleet completed success
ci / e2e-ui (comprehensive-drilldown-mt) completed success
ci / e2e-ui (drilldown-core-tail) completed success
ci / e2e-ui (explore-core) completed success
ci / e2e-ui (ops-mt) completed success
ci / e2e-ui (regression-datasource) completed success
ci / fuzz-smoke completed success
ci / fuzz-smoke-shard (1) completed success
ci / fuzz-smoke-shard (2) completed success
ci / fuzz-smoke-shard (3) completed success
ci / fuzz-smoke-shard (4) completed success
ci / helm completed success
ci / image completed success
ci / lint completed success
ci / memory-leak-tests completed success
ci / race-stress completed success
ci / race-stress-shard (1) completed success
ci / race-stress-shard (2) completed success
ci / race-stress-shard (3) completed success
ci / race-stress-shard (4) completed success
ci / race-stress-shard (5) completed success
ci / race-stress-shard (other) completed success
ci / scope / scope completed success
ci / stress-tests completed success
ci / test-shard (2) completed success
ci / test-shard (3) completed success
ci / test-shard (4) completed success
ci / test-shard (rest) completed success
ci / tuple-contract completed success
ci / tuple-smoke completed success
drilldown / drilldown-contract-matrix completed skipped
drilldown / drilldown-grafana-pr-matrix (12.4.14, previous_smoke, true, 2.6.0, ^(TestGrafanaDatasourceCatalog... completed success
drilldown / drilldown-grafana-pr-matrix (13.3.0, current_smoke, true, ^(TestGrafanaDatasourceCatalogAndHealth... completed success
drilldown / drilldown-grafana-runtime-matrix completed skipped
drilldown / drilldown-matrix-source completed success
drilldown / drilldown-pinned-runtime completed success
drilldown / scope / scope completed success
loki / loki-matrix completed skipped
loki / loki-matrix-source completed success
loki / loki-pinned completed success
loki / scope / scope completed success
perf / perf-plan completed success
perf / perf-smoke completed success
perf / perf-smoke-shard (1) completed success
perf / perf-smoke-shard (2) completed success
perf / perf-smoke-shard (3) completed success
perf / perf-smoke-shard (4) completed success
perf / scope / scope completed success
quality / base completed success

Showing 60/79 checks; failed and pending checks first. Full job lists remain in the linked runs.

No data (sections omitted): Coverage and tests (test count and coverage were not collected); API contract coverage and regression changes (no test outcomes, coverage or declared inventory in either snapshot); Synthetic handler microbenchmarks (no paired base/PR measurements).

Required checks decide merge safety. This report summarizes selected evidence; rendering starts no tests or heavy workloads.

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

✅ Visual smoke: passed with warnings

Base dddbe51991 vs PR 12e6568286, Grafana through the proxy builds and Loki on one fresh stack; run.
Loaded again, once and more patiently, after a first-pass difference or an unsettled page: lvl-dd-logs-pill-logfmt 1h.
Core set: 9 capture(s) at 1h. Detailed set: 34 entries (explore-nested-json-filtered-rate, explore-nested-json-filtered-count, lvl-explore-volume-json-by-dl, lvl-explore-volume-json-error-by-dl, explore-logs-plain, explore-metric-plain, lvl-dd-logs-pill-json, lvl-dd-logs-pill-otel, ...). 37 capture(s), 15m/1h/6h, 24h and 7d stay out of PR runs.
Trimmed to the 1h range for the capture budget: explore-keep-structured-metadata, lvl-explore-logs-drop-dl, explore-A, explore-D, explore-DLV5, explore-B, explore-C, explore-E, explore-F, explore-logs-json, explore-logfmt-metric, explore-logs-json-extraction, explore-logs-extracted, explore-extracted-metric, explore-extracted-filter-metric, explore-extracted-group-metric, explore-logs-plain-level, explore-json-extraction-list-level, explore-logfmt-extraction-list-level, explore-plain-level-metric, explore-logs-line-format, explore-logs-line-filter-or, explore-metric-line-filter-or, explore-unwrap-unit-string, explore-unwrap-missing-label, explore-ip-filter-json-metric, explore-unwrap-conversion-error, explore-unwrap-rate-sum, explore-stddev-by-app, explore-stdvar-without-pod, explore-stddev-trailing-by, explore-stddev-parsed-method, explore-unwrap-rate-counter-one-sample, explore-empty-pattern-filter, explore-unwrap-duration-seconds, explore-pattern-filter-anchored, explore-unwrap-quantile-over-time, explore-json-error-filter-metric, explore-json-count-by-detected-level-short-range, explore-json-count-by-detected-level, explore-unwrap-first-last-under-sum, explore-logs-label-filter-expression, explore-max-by-count-over-time-sliding, explore-nested-aggregation-outer-by, explore-without-over-inner-aggregation, explore-without-nested-under-aggregation, explore-sliding-sum-without-stream-fold, explore-sum-without-comparison-inside, explore-rate-detected-level-unknown, explore-rate-drop-detected-level, dd-labels-namespace, dd-field-service_version, dd-field-pipeline, explore-sum-without-rate, explore-topk-sum-without, explore-sum-without-count, explore-topk-without-keeps-labels, explore-logs-multivalue-regexp, explore-volume-multivalue-regexp, explore-volume-label-filter-regexp, explore-label-replace-over-binary.
Not run (capture budget): explore-keep-series-count, explore-ip-label-filter-absent, explore-748-uppercase-offset, explore-748-uppercase-bool, explore-748-uppercase-on, explore-748-uppercase-json-unwrap, explore-748-uppercase-topk-rate, explore-748-uppercase-sum, explore-748-reject-label-join, explore-label-replace-over-binary, explore-volume-label-filter-regexp, explore-volume-multivalue-regexp, explore-logs-multivalue-regexp, explore-topk-without-keeps-labels, lvl-dd-logs-pill-plaintext-bodyonly, lvl-explore-volume-dl-unknown-bodyonly, lvl-explore-logs-dl-unknown-bodyonly, lvl-explore-logs-dl-error-plaintext-bodyonly, explore-sum-without-count, explore-topk-sum-without, explore-sum-without-rate, dd-field-pipeline, dd-field-service_version, dd-labels-namespace, explore-rate-drop-detected-level, explore-rate-detected-level-unknown, explore-sum-without-comparison-inside, explore-sliding-sum-without-stream-fold, explore-without-nested-under-aggregation, explore-without-over-inner-aggregation, explore-nested-aggregation-outer-by, explore-max-by-count-over-time-sliding, explore-logs-label-filter-expression, explore-last-over-time-offset-line-filter, explore-unwrap-first-last-under-sum, explore-json-count-by-detected-level, explore-json-count-by-detected-level-short-range, explore-json-error-count-by-detected-level, explore-json-error-filter-metric, explore-unwrap-quantile-over-time, explore-pattern-filter-anchored, explore-unwrap-duration-seconds, explore-empty-pattern-filter, explore-unwrap-rate-counter-one-sample, explore-stddev-parsed-method, explore-stddev-trailing-by, explore-stdvar-without-pod, explore-stddev-by-app, explore-unwrap-rate-sum, explore-unwrap-conversion-error, explore-ip-filter-json-metric, explore-unwrap-missing-label, explore-unwrap-unit-string, explore-metric-line-filter-or, explore-logs-line-filter-or, explore-logs-line-format, explore-plain-level-metric, explore-logfmt-extraction-list-level, explore-json-extraction-list-level, explore-logs-plain-level, explore-extracted-group-metric, explore-extracted-filter-metric, explore-extracted-metric, explore-logs-extracted, explore-logs-json-extraction, explore-logfmt-presence-ungrouped, explore-logfmt-metric, explore-logs-json, explore-F, explore-E, explore-C, explore-B, explore-DLV5, explore-D, explore-A, lvl-explore-volume-level-extracted-stored, lvl-explore-volume-level-label-stored, lvl-explore-volume-drop-level, lvl-explore-volume-keep-dl, lvl-explore-topk-errors-by-service, lvl-explore-count-warn-by-service, lvl-explore-volume-json-level-filter, lvl-explore-volume-logfmt-dl, lvl-explore-volume-plaintext, lvl-explore-logs-dl-presence-stream, lvl-explore-logs-drop-level-stored, lvl-explore-logs-drop-level, lvl-explore-logs-drop-dl, lvl-explore-logs-keep-dl, explore-keep-structured-metadata, lvl-explore-logs-logfmt-level-extracted-stored, lvl-explore-logs-json-level-extracted-stored, lvl-explore-logs-level-selector-stored, lvl-explore-logs-level-label-stored, lvl-explore-logs-dl-plaintext.

page range set base = PR (data) vs Loki (PR) pixel diff result
dd-fields 1h core ✅ identical identical (4 explained) 0.11% ✅
dd-landing 1h core ✅ identical 1 difference(s), 1 on base too; 3 explained 10.74% ⚠️ pixel diff 10.7%
dd-service-logs 1h core ✅ identical identical (3 explained) 0.11% ✅
explore-logs-plain 1h core ✅ identical identical (1 explained) 0.07% ✅
explore-metric-plain 1h core ✅ identical identical (1 explained) 0.04% ✅
explore-sum-by-over-binary 1h core ✅ identical identical (1 explained) 0.08% ✅
explore-topk-by-per-step 1h core ✅ identical identical (1 explained) 0.04% ✅
explore-unwrap-sum 1h core ✅ identical identical (1 explained) 0.04% ✅
lvl-explore-rate-errors-by-service 1h core ✅ identical identical (1 explained) 0.04% ✅
explore-json-path-extraction-level-pill 1h detailed ✅ identical identical (1 explained) 0.04% ✅
explore-nested-json-filtered-count 1h detailed ✅ identical identical (1 explained) 0.04% ✅
explore-nested-json-filtered-rate 1h detailed ✅ identical identical (1 explained) 0.04% ✅
lvl-dd-field-method-pill 1h detailed ✅ identical identical (3 explained) 0.11% ✅
lvl-dd-field-pipeline-pill 1h detailed ✅ identical identical (3 explained) 0.11% ✅
lvl-dd-fields-pill 1h detailed ✅ identical identical (5 explained) 0.11% ✅
lvl-dd-label-pod-pill 1h detailed ✅ identical identical (3 explained) 0.11% ✅
lvl-dd-labels-pill 1h detailed ✅ identical identical (3 explained) 0.11% ✅
lvl-dd-logs-pill-json 1h detailed ✅ identical identical (3 explained) 0.11% ✅
lvl-dd-logs-pill-logfmt 1h detailed differs (1): resource /api/datasources/uid/*/resources/patterns?end=2026- identical (4 explained) 0.12% ✅ improved (closer to Loki)
lvl-dd-logs-pill-multi-json 1h detailed ✅ identical identical (3 explained) 0.11% ✅
lvl-dd-logs-pill-otel 1h detailed ✅ identical identical (3 explained) 0.11% ✅
lvl-explore-logs-dl-eq 1h detailed ✅ identical identical (1 explained) 0.07% ✅
lvl-explore-logs-dl-neq-all 1h detailed ✅ identical identical (1 explained) 0.07% ✅
lvl-explore-logs-dl-regexp 1h detailed ✅ identical identical (1 explained) 0.07% ✅
lvl-explore-logs-dl-unknown-or-error 1h detailed ✅ identical identical (1 explained) 0.07% ✅
lvl-explore-logs-json-dl 1h detailed ✅ identical identical (1 explained) 0.07% ✅
lvl-explore-logs-json-level 1h detailed ✅ identical identical (1 explained) 0.07% ✅
lvl-explore-logs-logfmt-level-regexp 1h detailed ✅ identical identical (1 explained) 0.07% ✅
lvl-explore-volume-dl-neq 1h detailed ✅ identical identical (1 explained) 0.04% ✅
lvl-explore-volume-dl-prefilter-json 1h detailed ✅ identical identical (1 explained) 0.04% ✅
lvl-explore-volume-dl-regexp 1h detailed ✅ identical identical (1 explained) 0.04% ✅
lvl-explore-volume-dl-unknown-or-error 1h detailed ✅ identical identical (1 explained) 0.09% ✅
lvl-explore-volume-json-by-dl 1h detailed ✅ identical identical (1 explained) 0.04% ✅
lvl-explore-volume-json-dl-filter 1h detailed ✅ identical identical (1 explained) 0.09% ✅
lvl-explore-volume-json-error-by-dl 1h detailed ✅ identical identical (1 explained) 0.04% ✅
lvl-explore-volume-logfmt-dl-filter 1h detailed ✅ identical identical (1 explained) 0.09% ✅
tail-json-filter live detailed ✅ identical entries in the window: PR 1939, Loki 761, in both 761 6.96% ✅

Gate: a base-vs-PR data difference passes when the PR is closer to Loki, and fails when the PR diverges from Loki or Loki cannot decide it (at a range Loki does not hold, a difference passes when the same page proved that query to answer like Loki at a shorter range; otherwise label the pull request visual-change-expected to accept an intended change). Also failing: a panel empty on the PR but not on the base, an error banner, panel error, error answer or new "No data" panel on the PR, a PR side that never settled, a value difference that did not reproduce on the recapture. A delayed first-pass request and pixel differences only warn.

dd-landing-1h: pixel diff 10.7%
  • pixel diff 10.7%
  • vs Loki: query ('{service_name=`visual-extraction-list` }', 'range', '1794217920000', '1794221520000', '2: ('logs-visual-extraction-list', '', '{}'): content differs (rows 2 vs 2)
  • vs Loki, explained: resource /api/datasources/uid/*/resources/detected_labels?end=2026-11-09T10%3A52%3A00.000Z&query=&s: body: content differs (rows 17 vs 17) -- explained: sampled cardinality: Loki counts every stream its ingesters hold, not the requested window (pkg/ingester/instance.go LabelsWithValues), the proxy the window's last 5 minutes (metadataMaxFieldNamesWindow); the label names match; the proxy also returns data, limit, status; Loki lists labels in no fixed order
  • vs Loki, explained: resource /api/datasources/uid/*/resources/drilldown-limits: body: content differs (rows 0 vs 0) -- explained: configuration probe: each backend publishes its own limits, version and settings (the proxy's pattern persistence)
  • vs Loki, explained: resource /api/datasources/uid/*/resources/index/volume?end=2026-11-09T10%3A52%3A00.000Z&limit=5000&: body: content differs (rows 0 vs 0) -- explained: volume bytes: VictoriaLogs sums stored line lengths, Loki its chunks' ingested bytes with structured metadata (registry loki_api_v1_index_volume, vl_cannot); the series match

dd-landing-1h

Core set montages (8): base | PR | Loki

dd-fields-1h

dd-fields-1h

dd-service-logs-1h

dd-service-logs-1h

explore-logs-plain-1h

explore-logs-plain-1h

explore-metric-plain-1h

explore-metric-plain-1h

explore-sum-by-over-binary-1h

explore-sum-by-over-binary-1h

explore-topk-by-per-step-1h

explore-topk-by-per-step-1h

explore-unwrap-sum-1h

explore-unwrap-sum-1h

lvl-explore-rate-errors-by-service-1h

lvl-explore-rate-errors-by-service-1h

Published inline montages: pr-visuals/pr-1236. Full montage set: artifact.

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

⚪ Performance A/B: no change beyond noise

448 shape×range — 448 ⚪ same · results vs Loki: 422 same, 0 new difference(s), 23 pre-existing

Loki profiles compared (like for like):

  • aligned: 177 shape×range; proxy flag base on, pr on
  • loki-defaults: 271 shape×range; proxy flag base on, pr on

Compared with the above-2× baseline: 4 rows (cold 4, warm 0, refresh 0; aligned 1, loki-defaults 3); a new or worsened row fails a pull request.

Every shape is within noise of the base build (±30% and 100 ms).

448 unchanged shape×range (within noise)
shape range Loki profile base p50 PR p50 change Loki p50 PR ÷ Loki result vs Loki
⚪ B1 sum by over rate divided by a literal 1h defaults 9 ms 8 ms ⚪ -11% 36 ms 0.22× ✅ same
⚪ B1 sum by over rate divided by a literal 1h aligned 7 ms 7 ms ⚪ +0% 39 ms 0.18× ✅ same
⚪ B2 sum by over a ratio of two per-stream metrics 1h defaults 60 ms 60 ms ⚪ +0% 90.09 s (0) — ➖ differs (as base)
⚪ B2 sum by over a ratio of two per-stream metrics 1h aligned 75 ms 65 ms ⚪ -13% 90.02 s (0) — ➖ differs (as base)
⚪ B3 sum over a literal times count, instant instant defaults 15 ms 14 ms ⚪ -7% 26 ms 0.54× ✅ same
⚪ B4 outer sum over ignoring(machine) 1h defaults 23 ms 22 ms ⚪ -4% 122 ms 0.18× ✅ same
⚪ B4 outer sum over ignoring(machine) 1h aligned 23 ms 22 ms ⚪ -4% 128 ms 0.17× ✅ same
⚪ bytes_over_time by app 1h defaults 23 ms 17 ms ⚪ -26% 233 ms 0.07× ✅ same
⚪ bytes_over_time by app 1h aligned 8 ms 8 ms ⚪ +0% 95 ms 0.08× ✅ same
⚪ detected_level volume 1h defaults 13 ms 18 ms ⚪ +38% 136 ms 0.13× ✅ same
⚪ detected_level volume 1h aligned 7 ms 8 ms ⚪ +14% 56 ms 0.14× ✅ same
⚪ drilldown detected_level 1h defaults 13 ms 14 ms ⚪ +8% 122 ms 0.11× ✅ same
⚪ drilldown detected_level 1h aligned 8 ms 7 ms ⚪ -12% 32 ms 0.22× ✅ same
⚪ drilldown level volume 1h defaults 7 ms 6 ms ⚪ -14% 125 ms 0.05× ✅ same
⚪ drilldown level volume 1h aligned 5 ms 4 ms ⚪ -20% 40 ms 0.10× ✅ same
⚪ drilldown service landing 1h defaults 8 ms 10 ms ⚪ +25% 123 ms 0.08× ✅ same
⚪ drilldown service landing 1h aligned 7 ms 7 ms ⚪ +0% 34 ms 0.21× ✅ same
⚪ instant json filtered instant defaults 38 ms 46 ms ⚪ +21% 124 ms 0.37× ✅ same
⚪ instant json volume instant defaults 34 ms 34 ms ⚪ +0% 136 ms 0.25× ✅ same
⚪ instant ungrouped rate instant defaults 15 ms 14 ms ⚪ -7% 116 ms 0.12× ✅ same
⚪ json rate by level (no filter, no drop) 1h defaults 17 ms (400) 50 ms (400) ⚪ +194% 198 ms (400) — ✅ same
⚪ json rate by level (no filter, no drop) 1h aligned 31 ms (400) 28 ms (400) ⚪ -10% 209 ms (400) — ✅ same
⚪ json volume no filters 1h defaults 85 ms 88 ms ⚪ +4% 183 ms 0.48× ✅ same
⚪ json volume no filters 1h aligned 35 ms 35 ms ⚪ +0% 89 ms 0.39× ✅ same
⚪ logfmt count by level, filter, drop 1h defaults 41 ms 51 ms ⚪ +24% 190 ms 0.27× ✅ same
⚪ logfmt count by level, filter, drop 1h aligned 12 ms 12 ms ⚪ +0% 75 ms 0.16× ✅ same
⚪ logfmt volume 1h defaults 26 ms 28 ms ⚪ +8% 230 ms 0.12× ✅ same
⚪ logfmt volume 1h aligned 9 ms 8 ms ⚪ -11% 65 ms 0.12× ✅ same
⚪ logs plain 1h defaults 48 ms 38 ms ⚪ -21% 86 ms 0.44× ✅ same
⚪ logs | json 1h defaults 62 ms 72 ms ⚪ +16% 104 ms 0.69× ✅ same
⚪ logs | logfmt 1h defaults 93 ms 85 ms ⚪ -9% 92 ms 0.92× ✅ same
⚪ plain volume 1h defaults 7 ms 6 ms ⚪ -14% 145 ms 0.04× ✅ same
⚪ plain volume 1h aligned 5 ms 5 ms ⚪ +0% 49 ms 0.10× ✅ same
⚪ stream-label count by app 1h defaults 12 ms 13 ms ⚪ +8% 153 ms 0.08× ✅ same
⚪ stream-label count by app 1h aligned 8 ms 8 ms ⚪ +0% 45 ms 0.18× ✅ same
⚪ topk rate by app 1h defaults 21 ms 20 ms ⚪ -5% 209 ms 0.10× ✅ same
⚪ topk rate by app 1h aligned 15 ms 16 ms ⚪ +7% 99 ms 0.16× ✅ same
⚪ ungrouped rate 1h defaults 14 ms 19 ms ⚪ +36% 187 ms 0.10× ✅ same
⚪ ungrouped rate 1h aligned 10 ms 10 ms ⚪ +0% 111 ms 0.09× ✅ same
⚪ DB1 label breakdown pod 1h defaults 138 ms 133 ms ⚪ -4% 276 ms 0.48× ✅ same
⚪ DB1 label breakdown pod 1h aligned 130 ms 125 ms ⚪ -4% 193 ms 0.65× ✅ same
⚪ DB2 label breakdown namespace 1h defaults 15 ms 13 ms ⚪ -13% 111 ms 0.12× ✅ same
⚪ DB2 label breakdown namespace 1h aligned 6 ms 7 ms ⚪ +17% 75 ms 0.09× ✅ same
⚪ DB3 json field breakdown user_id 1h defaults 11 ms 9 ms ⚪ -18% 99 ms 0.09× ✅ same
⚪ DB3 json field breakdown user_id 1h aligned 6 ms 7 ms ⚪ +17% 60 ms 0.12× ✅ same
⚪ DB4 json field breakdown batch_id 1h defaults 64 ms 52 ms ⚪ -19% 131 ms 0.40× ✅ same
⚪ DB4 json field breakdown batch_id 1h aligned 46 ms 57 ms ⚪ +24% 70 ms 0.81× ✅ same
⚪ JP1 drilldown fields breakdown, JSON path, level pill 1h defaults 13 ms 12 ms ⚪ -8% 20 ms 0.60× ✅ same
⚪ JP1 drilldown fields breakdown, JSON path, level pill 1h aligned 10 ms 9 ms ⚪ -10% 19 ms 0.47× ✅ same
⚪ JP2 drilldown fields breakdown, JSON path 1h defaults 7 ms 7 ms ⚪ +0% 13 ms 0.54× ✅ same
⚪ JP2 drilldown fields breakdown, JSON path 1h aligned 5 ms 5 ms ⚪ +0% 11 ms 0.45× ✅ same
⚪ X1 json filter level_extracted, by level 1h defaults 70 ms 71 ms ⚪ +1% 86 ms 0.83× ✅ same
⚪ X1 json filter level_extracted, by level 1h aligned 67 ms 71 ms ⚪ +6% 66 ms 1.08× ✅ same
⚪ X2 json group by level_extracted 1h defaults 11 ms 15 ms ⚪ +36% 64 ms 0.23× ✅ same
⚪ X2 json group by level_extracted 1h aligned 13 ms 13 ms ⚪ +0% 69 ms 0.19× ✅ same
⚪ X3 json rate, level_extracted equality 1h defaults 19 ms 18 ms ⚪ -5% 55 ms 0.33× ✅ same
⚪ X3 json rate, level_extracted equality 1h aligned 10 ms 9 ms ⚪ -10% 48 ms 0.19× ✅ same
⚪ X4 json bytes, level_extracted regexp 1h defaults 75 ms 75 ms ⚪ +0% 134 ms 0.56× ✅ same
⚪ X4 json bytes, level_extracted regexp 1h aligned 69 ms 75 ms ⚪ +9% 151 ms 0.50× ✅ same
⚪ X5 logfmt filter level_extracted, by level 1h defaults 19 ms 18 ms ⚪ -5% 74 ms 0.24× ✅ same
⚪ X5 logfmt filter level_extracted, by level 1h aligned 17 ms 16 ms ⚪ -6% 64 ms 0.25× ✅ same
⚪ E1 logs, json parser over stream labels 1h defaults 70 ms 71 ms ⚪ +1% 65 ms 1.09× ✅ same
⚪ E2 logs, logfmt parser over stream labels 1h defaults 41 ms 40 ms ⚪ -2% 54 ms 0.74× ✅ same
⚪ E3 logs, json, existence filter on level_extracted 1h defaults 79 ms 87 ms ⚪ +10% 82 ms 1.06× ✅ same
⚪ E4 logs, logfmt, existence filter on level_extracted 1h defaults 50 ms 52 ms ⚪ +4% 60 ms 0.87× ✅ same
⚪ E5 logs, json, drop level_extracted 1h defaults 79 ms 72 ms ⚪ -9% 66 ms 1.09× ✅ same
⚪ E6 logfmt count by level_extracted 1h defaults 6 ms 6 ms ⚪ +0% 8 ms 0.75× ✅ same
⚪ E6 logfmt count by level_extracted 1h aligned 5 ms 5 ms ⚪ +0% 9 ms 0.56× ✅ same
⚪ E7 json count by level_extracted 1h defaults 55 ms 58 ms ⚪ +5% 18 ms 3.22× ✅ same
⚪ E7 json count by level_extracted 1h aligned 54 ms 54 ms ⚪ +0% 21 ms 2.57× ✅ same
⚪ E8 instant logfmt by level_extracted instant defaults 7 ms 7 ms ⚪ +0% 9 ms 0.78× ✅ same
⚪ IP1 logs, addr=ip(single), label absent 1h defaults 46 ms 41 ms ⚪ -11% 12 ms 3.42× ✅ same
⚪ IP2 logs, json ip=ip(CIDR) 1h defaults 130 ms 128 ms ⚪ -2% 102 ms 1.25× ✅ same
⚪ IP3 logs, json ip!=ip(CIDR) 1h defaults 92 ms 93 ms ⚪ +1% 67 ms 1.39× ✅ same
⚪ IP4 count, json ip=ip(CIDR) 1h defaults 39 ms 39 ms ⚪ +0% 16 ms 2.44× ✅ same
⚪ IP4 count, json ip=ip(CIDR) 1h aligned 38 ms 39 ms ⚪ +3% 20 ms 1.95× ✅ same
⚪ IP5 count, json ip=ip(range) 1h defaults 37 ms 36 ms ⚪ -3% 10 ms 3.60× ✅ same
⚪ IP5 count, json ip=ip(range) 1h aligned 36 ms 36 ms ⚪ +0% 12 ms 3.00× ✅ same
⚪ DLV1 drilldown logs volume, json 1h defaults 21 ms 20 ms ⚪ -5% 21 ms 0.95× ✅ same
⚪ DLV1 drilldown logs volume, json 1h aligned 21 ms 21 ms ⚪ +0% 18 ms 1.17× ✅ same
⚪ DLV2 json error filter, detected_level 1h defaults 23 ms 23 ms ⚪ +0% 63 ms 0.37× ✅ same
⚪ DLV2 json error filter, detected_level 1h aligned 23 ms 25 ms ⚪ +9% 62 ms 0.40× ✅ same
⚪ DLV3 plain json, detected_level 1h defaults 4 ms 4 ms ⚪ +0% 22 ms 0.18× ✅ same
⚪ DLV3 plain json, detected_level 1h aligned 5 ms 5 ms ⚪ +0% 18 ms 0.28× ✅ same
⚪ DLV4 explore json volume, level and detected_level 1h defaults 35 ms 34 ms ⚪ -3% 15 ms 2.27× ✅ same
⚪ DLV4 explore json volume, level and detected_level 1h aligned 36 ms 34 ms ⚪ -6% 14 ms 2.43× ✅ same
⚪ DLV5 json error dropped, detected_level 1h defaults 4 ms 5 ms ⚪ +25% 69 ms 0.07× ✅ same
⚪ DLV5 json error dropped, detected_level 1h aligned 5 ms 6 ms ⚪ +20% 52 ms 0.12× ✅ same
⚪ DLV6 drilldown detected_level breakdown, json 1h defaults 2 ms 2 ms ⚪ +0% 49 ms 0.04× ✅ same
⚪ DLV6 drilldown detected_level breakdown, json 1h aligned 2 ms 2 ms ⚪ +0% 36 ms 0.06× ✅ same
⚪ DLV7 plain json, detected_level, 30s range (shorter than the 24h step) 1h defaults 1 ms 2 ms ⚪ +100% 17 ms 0.12× ✅ same
⚪ DLV7 plain json, detected_level, 30s range (shorter than the 24h step) 1h aligned 1 ms 1 ms ⚪ +0% 13 ms 0.08× ✅ same
⚪ J1 json no-error count by service_name, one service 1h defaults 19 ms 20 ms ⚪ +5% 32 ms 0.62× ✅ same
⚪ J1 json no-error count by service_name, one service 1h aligned 20 ms 20 ms ⚪ +0% 41 ms 0.49× ✅ same
⚪ J2 json no-error count by app, namespace 1h defaults 44 ms 48 ms ⚪ +9% 91 ms 0.53× ✅ same
⚪ J2 json no-error count by app, namespace 1h aligned 44 ms 42 ms ⚪ -5% 108 ms 0.39× ✅ same
⚪ J3 json no-error count by parsed method 1h defaults 37 ms 38 ms ⚪ +3% 30 ms 1.27× ✅ same
⚪ J3 json no-error count by parsed method 1h aligned 37 ms 37 ms ⚪ +0% 29 ms 1.28× ✅ same
⚪ J4 json no-error count by service_name, all services 1h defaults 25 ms 25 ms ⚪ +0% 115 ms 0.22× ✅ same
⚪ J4 json no-error count by service_name, all services 1h aligned 26 ms 26 ms ⚪ +0% 114 ms 0.23× ✅ same
⚪ J5 json no-error bytes_rate by app 1h defaults 14 ms 13 ms ⚪ -7% 97 ms 0.13× ✅ same
⚪ J5 json no-error bytes_rate by app 1h aligned 13 ms 13 ms ⚪ +0% 83 ms 0.16× ✅ same
⚪ A explore volume, 2 filters, drop 1h defaults 89 ms 83 ms ⚪ -7% 128 ms 0.65× ✅ same
⚪ A explore volume, 2 filters, drop 1h aligned 52 ms 48 ms ⚪ -8% 92 ms 0.52× ✅ same
⚪ B grouped sum, filter, no drop 1h defaults 73 ms 74 ms ⚪ +1% 117 ms 0.63× ✅ same
⚪ B grouped sum, filter, no drop 1h aligned 39 ms 39 ms ⚪ +0% 45 ms 0.87× ✅ same
⚪ C ungrouped sum, filter, no drop 1h defaults 72 ms 72 ms ⚪ +0% 112 ms 0.64× ✅ same
⚪ C ungrouped sum, filter, no drop 1h aligned 40 ms 39 ms ⚪ -3% 44 ms 0.89× ✅ same
⚪ D volume, no filters 1h defaults 88 ms 82 ms ⚪ -7% 157 ms 0.52× ✅ same
⚪ D volume, no filters 1h aligned 39 ms 38 ms ⚪ -3% 51 ms 0.75× ✅ same
⚪ E field breakdown pipeline (explore) 1h defaults 73 ms 74 ms ⚪ +1% 118 ms 0.63× ✅ same
⚪ E field breakdown pipeline (explore) 1h aligned 37 ms 35 ms ⚪ -5% 45 ms 0.78× ✅ same
⚪ F field breakdown service_version (explore) 1h defaults 57 ms 56 ms ⚪ -2% 138 ms 0.41× ✅ same
⚪ F field breakdown service_version (explore) 1h aligned 52 ms 55 ms ⚪ +6% 51 ms 1.08× ✅ same
⚪ G field breakdown pipeline (drilldown) 1h defaults 10 ms 9 ms ⚪ -10% 100 ms 0.09× ✅ same
⚪ G field breakdown pipeline (drilldown) 1h aligned 6 ms 5 ms ⚪ -17% 38 ms 0.13× ✅ same
⚪ H field breakdown service_version (drilldown) 1h defaults 7 ms 8 ms ⚪ +14% 110 ms 0.07× ✅ same
⚪ H field breakdown service_version (drilldown) 1h aligned 3 ms 3 ms ⚪ +0% 40 ms 0.07× ✅ same
⚪ I grafana volume of B 1h defaults 44 ms 44 ms ⚪ +0% 112 ms 0.39× ✅ same
⚪ I grafana volume of B 1h aligned 37 ms 36 ms ⚪ -3% 54 ms 0.67× ✅ same
⚪ K1 logs, json, keep level 1h defaults 37 ms 44 ms ⚪ +19% 35 ms 1.26× ➖ differs (as base)
⚪ K2 logs, logfmt, keep level, msg 1h defaults 27 ms 27 ms ⚪ +0% 19 ms 1.42× ✅ same
⚪ K3 count of series, json, keep foo 1h defaults 6 ms 6 ms ⚪ +0% 46 ms 0.13× ✅ same
⚪ K3 count of series, json, keep foo 1h aligned 5 ms 5 ms ⚪ +0% 48 ms 0.10× ✅ same
⚪ K4 count of series, json, keep foo, instant instant defaults 68 ms 60 ms ⚪ -12% 37 ms 1.62× ✅ same
⚪ K5 rate, keep namespace 1h defaults 5 ms 4 ms ⚪ -20% 24 ms 0.17× ✅ same
⚪ K5 rate, keep namespace 1h aligned 5 ms 5 ms ⚪ +0% 23 ms 0.22× ✅ same
⚪ K6 count by kept key, json 1h defaults 39 ms 39 ms ⚪ +0% 17 ms 2.29× ✅ same
⚪ K6 count by kept key, json 1h aligned 39 ms 40 ms ⚪ +3% 16 ms 2.50× ✅ same
⚪ LF1 count by level, group then comma 1h defaults 7 ms 7 ms ⚪ +0% 49 ms 0.14× ✅ same
⚪ LF1 count by level, group then comma 1h aligned 8 ms 8 ms ⚪ +0% 80 ms 0.10× ✅ same
⚪ LF2 ungrouped count, comma-joined 1h defaults 6 ms 7 ms ⚪ +17% 47 ms 0.15× ✅ same
⚪ LF2 ungrouped count, comma-joined 1h aligned 8 ms 8 ms ⚪ +0% 56 ms 0.14× ✅ same
⚪ LF3 explore volume, group, drop 1h defaults 13 ms 13 ms ⚪ +0% 47 ms 0.28× ✅ same
⚪ LF3 explore volume, group, drop 1h aligned 13 ms 14 ms ⚪ +8% 53 ms 0.26× ✅ same
⚪ LF4 explore volume, two stages (control) 1h defaults 45 ms 46 ms ⚪ +2% 48 ms 0.96× ✅ same
⚪ LF4 explore volume, two stages (control) 1h aligned 50 ms 49 ms ⚪ -2% 47 ms 1.04× ✅ same
⚪ M1 multi-value variable, log query 1h defaults 27 ms 25 ms ⚪ -7% 26 ms 0.96× ✅ same
⚪ M2 multi-value variable, count by app 1h defaults 5 ms 5 ms ⚪ +0% 33 ms 0.15× ✅ same
⚪ M2 multi-value variable, count by app 1h aligned 5 ms 4 ms ⚪ -20% 26 ms 0.15× ✅ same
⚪ M3 single-value variable, log query 1h defaults 16 ms 15 ms ⚪ -6% 21 ms 0.71× ✅ same
⚪ M4 alternation over many streams, count 1h defaults 4 ms 6 ms ⚪ +50% 170 ms 0.04× ✅ same
⚪ M4 alternation over many streams, count 1h aligned 4 ms 4 ms ⚪ +0% 77 ms 0.05× ✅ same
⚪ M5 json label filter, literal alternation 1h defaults 37 ms 36 ms ⚪ -3% 25 ms 1.44× ✅ same
⚪ M5 json label filter, literal alternation 1h aligned 36 ms 36 ms ⚪ +0% 23 ms 1.57× ✅ same
⚪ M6 json label filter, prefix (substring in Loki) 1h defaults 26 ms 24 ms ⚪ -8% 48 ms 0.50× ✅ same
⚪ L5 label_replace over json sum by, instant instant defaults 56 ms 57 ms ⚪ +2% 29 ms 1.97× ✅ same
⚪ L6 label_replace over json sum by 1h defaults 48 ms 45 ms ⚪ -6% 68 ms 0.66× ✅ same
⚪ L6 label_replace over json sum by 1h aligned 19 ms 20 ms ⚪ +5% 39 ms 0.51× ✅ same
⚪ L7 label_replace around a binary of two sums by level 1h defaults 23 ms 23 ms ⚪ +0% 21 ms 1.10× ✅ same
⚪ L7 label_replace around a binary of two sums by level 1h aligned 22 ms 21 ms ⚪ -5% 18 ms 1.17× ✅ same
⚪ L8 label_replace over sum by level count, instant instant defaults 5 ms 5 ms ⚪ +0% 12 ms 0.42× ✅ same
⚪ LF1 logs, detected_level equals 1h defaults 76 ms 76 ms ⚪ +0% 69 ms 1.10× ✅ same
⚪ LF10 drilldown logs, level pill multi-select, json service 1h defaults 95 ms 93 ms ⚪ -2% 35 ms 2.66× ✅ same
⚪ LF11 drilldown logs volume by level, existing level 1h defaults 10 ms 10 ms ⚪ +0% 35 ms 0.29× ✅ same
⚪ LF11 drilldown logs volume by level, existing level 1h aligned 11 ms 10 ms ⚪ -9% 31 ms 0.32× ✅ same
⚪ LF12 drilldown logs volume by level, level pill 1h defaults 11 ms 11 ms ⚪ +0% 11 ms 1.00× ✅ same
⚪ LF12 drilldown logs volume by level, level pill 1h aligned 10 ms 10 ms ⚪ +0% 16 ms 0.62× ✅ same
⚪ LF13 explore volume, level filter before json 1h defaults 36 ms 36 ms ⚪ +0% 27 ms 1.33× ✅ same
⚪ LF13 explore volume, level filter before json 1h aligned 37 ms 36 ms ⚪ -3% 28 ms 1.29× ✅ same
⚪ LF14 explore volume, plain-text service 1h defaults 8 ms 9 ms ⚪ +12% 4 ms 2.25× ✅ same
⚪ LF14 explore volume, plain-text service 1h aligned 11 ms 10 ms ⚪ -9% 7 ms 1.43× ✅ same
⚪ LF15 drilldown field breakdown, level filter 1h defaults 12 ms 12 ms ⚪ +0% 15 ms 0.80× ✅ same
⚪ LF15 drilldown field breakdown, level filter 1h aligned 7 ms 7 ms ⚪ +0% 10 ms 0.70× ✅ same
⚪ LF16 drilldown label breakdown, level filter 1h defaults 38 ms 36 ms ⚪ -5% 10 ms 3.60× ✅ same
⚪ LF16 drilldown label breakdown, level filter 1h aligned 37 ms 37 ms ⚪ +0% 9 ms 4.11× ✅ same
⚪ LF17 detected_level count, level regexp 1h defaults 7 ms 6 ms ⚪ -14% 38 ms 0.16× ✅ same
⚪ LF17 detected_level count, level regexp 1h aligned 9 ms 7 ms ⚪ -22% 37 ms 0.19× ✅ same
⚪ LF18 detected_level count, level not equal 1h defaults 6 ms 7 ms ⚪ +17% 39 ms 0.18× ✅ same
⚪ LF18 detected_level count, level not equal 1h aligned 6 ms 7 ms ⚪ +17% 40 ms 0.17× ✅ same
⚪ LF19 detected_level count, regexp with unknown 1h defaults 6 ms 6 ms ⚪ +0% 35 ms 0.17× ✅ same
⚪ LF19 detected_level count, regexp with unknown 1h aligned 6 ms 6 ms ⚪ +0% 43 ms 0.14× ✅ same
⚪ LF2 logs, detected_level regexp 1h defaults 107 ms 108 ms ⚪ +1% 31 ms 3.48× ✅ same
⚪ LF20 logfmt count by detected_level 1h defaults 9 ms 9 ms ⚪ +0% 9 ms 1.00× ✅ same
⚪ LF20 logfmt count by detected_level 1h aligned 11 ms 10 ms ⚪ -9% 13 ms 0.77× ✅ same
⚪ LF21 logfmt count by detected_level, level filter 1h defaults 6 ms 5 ms ⚪ -17% 7 ms 0.71× ✅ same
⚪ LF21 logfmt count by detected_level, level filter 1h aligned 6 ms 6 ms ⚪ +0% 8 ms 0.75× ✅ same
⚪ LF22 json count by detected_level, level filter 1h defaults 4 ms 4 ms ⚪ +0% 14 ms 0.29× ✅ same
⚪ LF22 json count by detected_level, level filter 1h aligned 5 ms 5 ms ⚪ +0% 15 ms 0.33× ✅ same
⚪ LF23 json count by level, level filter 1h defaults 35 ms 34 ms ⚪ -3% 12 ms 2.83× ✅ same
⚪ LF23 json count by level, level filter 1h aligned 35 ms 35 ms ⚪ +0% 14 ms 2.50× ✅ same
⚪ LF24 rate of errors by service 1h defaults 11 ms 10 ms ⚪ -9% 73 ms 0.14× ✅ same
⚪ LF24 rate of errors by service 1h aligned 10 ms 12 ms ⚪ +20% 78 ms 0.15× ✅ same
⚪ LF25 count of warnings, error label dropped 1h defaults 12 ms 11 ms ⚪ -8% 40 ms 0.27× ✅ same
⚪ LF25 count of warnings, error label dropped 1h aligned 11 ms 14 ms ⚪ +27% 40 ms 0.35× ✅ same
⚪ LF26 topk services by errors 1h defaults 7 ms 7 ms ⚪ +0% 72 ms 0.10× ✅ same
⚪ LF26 topk services by errors 1h aligned 7 ms 11 ms ⚪ +57% 80 ms 0.14× ✅ same
⚪ LF27 detected_level count, instant instant defaults 12 ms 13 ms ⚪ +8% 68 ms 0.19× ✅ same
⚪ LF28 logs, keep detected_level 1h defaults 24 ms 23 ms ⚪ -4% 17 ms 1.35× ✅ same
⚪ LF29 logs, drop detected_level 1h defaults 34 ms 31 ms ⚪ -9% 17 ms 1.82× ✅ same
⚪ LF3 logs, detected_level not equal, all services 1h defaults 47 ms 51 ms ⚪ +9% 52 ms 0.98× ✅ same
⚪ LF30 logs, drop level 1h defaults 41 ms 35 ms ⚪ -15% 18 ms 1.94× ✅ same
⚪ LF31 count by detected_level, level dropped 1h defaults 6 ms 7 ms ⚪ +17% 13 ms 0.54× ✅ same
⚪ LF31 count by detected_level, level dropped 1h aligned 7 ms 6 ms ⚪ -14% 13 ms 0.46× ✅ same
⚪ LF32 count by detected_level, detected_level kept 1h defaults 7 ms 7 ms ⚪ +0% 14 ms 0.50× ✅ same
⚪ LF32 count by detected_level, detected_level kept 1h aligned 7 ms 7 ms ⚪ +0% 13 ms 0.54× ✅ same
⚪ LF33 drilldown logs count, level pill, instant instant defaults 7 ms 7 ms ⚪ +0% 15 ms 0.47× ✅ same
⚪ LF4 logs, detected_level regexp with unknown 1h defaults 111 ms 116 ms ⚪ +5% 103 ms 1.13× ✅ same
⚪ LF5 logs, plain-text service, detected_level regexp 1h defaults 64 ms 64 ms ⚪ +0% 14 ms 4.57× ✅ same
⚪ LF6 logs, json then detected_level 1h defaults 151 ms 152 ms ⚪ +1% 189 ms 0.80× ✅ same
⚪ LF7 logs, json then level equals 1h defaults 154 ms 150 ms ⚪ -3% 196 ms 0.77× ✅ same
⚪ LF8 logs, logfmt then level regexp 1h defaults 84 ms 95 ms ⚪ +13% 73 ms 1.30× ✅ same
⚪ LF9 drilldown logs, level pill, logfmt service 1h defaults 78 ms 71 ms ⚪ -9% 31 ms 2.29× ✅ same
⚪ LS1 logs, level stream label 1h defaults 61 ms 62 ms ⚪ +2% 72 ms 0.86× ✅ same
⚪ LS2 logs, level stream label regexp, all services 1h defaults 55 ms 56 ms ⚪ +2% 72 ms 0.78× ✅ same
⚪ LS3 logs, level in the selector 1h defaults 54 ms 51 ms ⚪ -6% 35 ms 1.46× ✅ same
⚪ LS4 logs, json then level_extracted 1h defaults 215 ms 198 ms ⚪ -8% 206 ms 0.96× ✅ same
⚪ LS5 logs, logfmt then level_extracted regexp 1h defaults 90 ms 90 ms ⚪ +0% 71 ms 1.27× ✅ same
⚪ LS6 level stream label count 1h defaults 5 ms 4 ms ⚪ -20% 42 ms 0.10× ✅ same
⚪ LS6 level stream label count 1h aligned 4 ms 4 ms ⚪ +0% 66 ms 0.06× ✅ same
⚪ LS7 rate of level stream label by service 1h defaults 5 ms 5 ms ⚪ +0% 75 ms 0.07× ✅ same
⚪ LS7 rate of level stream label by service 1h aligned 5 ms 5 ms ⚪ +0% 116 ms 0.04× ✅ same
⚪ LS8 json count by level_extracted, collision 1h defaults 55 ms 56 ms ⚪ +2% 15 ms 3.73× ✅ same
⚪ LS8 json count by level_extracted, collision 1h aligned 57 ms 56 ms ⚪ -2% 19 ms 2.95× ✅ same
⚪ O1 explore logs, underscore structured-metadata filter 1h defaults 345 ms 341 ms ⚪ -1% 380 ms 0.90× ✅ same
⚪ O1 explore logs, underscore structured-metadata filter 1h aligned 423 ms 419 ms ⚪ -1% 411 ms 1.02× ✅ same
⚪ O2 explore log volume (Grafana form), underscore structured-metadata filter 1h defaults 39 ms 39 ms ⚪ +0% 58 ms 0.67× ✅ same
⚪ O2 explore log volume (Grafana form), underscore structured-metadata filter 1h aligned 37 ms 38 ms ⚪ +3% 53 ms 0.72× ✅ same
⚪ O3 explore logs, dotted structured-metadata filter 1h defaults 1 ms (400) 1 ms (400) ⚪ +0% 1 ms (400) — ✅ same
⚪ O3 explore logs, dotted structured-metadata filter 1h aligned 1 ms (400) 1 ms (400) ⚪ +0% 1 ms (400) — ✅ same
⚪ O4 explore log volume (Grafana form), dotted structured-metadata filter 1h defaults 1 ms (400) 1 ms (400) ⚪ +0% 1 ms (400) — ✅ same
⚪ O4 explore log volume (Grafana form), dotted structured-metadata filter 1h aligned 1 ms (400) 1 ms (400) ⚪ +0% 1 ms (400) — ✅ same
⚪ drilldown detected fields 1h defaults 1 ms 1 ms ⚪ +0% 24 ms 0.04× ➖ differs (as base)
⚪ drilldown detected fields, level pill 1h defaults 1 ms 1 ms ⚪ +0% 34 ms 0.03× ➖ differs (as base)
⚪ drilldown detected labels 1h defaults 1 ms 1 ms ⚪ +0% 2 ms 0.50× ➖ differs (as base)
⚪ drilldown landing volume 1h defaults 10 ms 10 ms ⚪ +0% 64 ms 0.16× ➖ differs (as base)
⚪ explore label values env 1h defaults 1 ms 1 ms ⚪ +0% 28 ms 0.04× ✅ same
⚪ explore label values service_name 1h defaults 1 ms 1 ms ⚪ +0% 38 ms 0.03× ✅ same
⚪ explore labels (label browser) 1h defaults 1 ms 1 ms ⚪ +0% 2 ms 0.50× ✅ same
⚪ explore labels with selector 1h defaults 1 ms 1 ms ⚪ +0% 41 ms 0.02× ✅ same
⚪ refresh label values env 1h defaults 23 ms 24 ms ⚪ +4% 32 ms 0.75× ✅ same
⚪ refresh label values service_name 1h defaults 10 ms 9 ms ⚪ -10% 41 ms 0.22× ✅ same
⚪ refresh labels (label browser) 1h defaults 15 ms 15 ms ⚪ +0% 2 ms 7.50× ✅ same
⚪ refresh labels with selector 1h defaults 17 ms 18 ms ⚪ +6% 41 ms 0.44× ✅ same
⚪ DL1 drilldown field breakdown json-expr, level filter 1h defaults 16 ms 20 ms ⚪ +25% 41 ms 0.49× ✅ same
⚪ DL1 drilldown field breakdown json-expr, level filter 1h aligned 17 ms 16 ms ⚪ -6% 32 ms 0.50× ✅ same
⚪ DL2 drilldown field breakdown, level + stream-label filter before json 1h defaults 35 ms 35 ms ⚪ +0% 9 ms 3.89× ✅ same
⚪ DL2 drilldown field breakdown, level + stream-label filter before json 1h aligned 34 ms 35 ms ⚪ +3% 11 ms 3.18× ✅ same
⚪ DL3 drilldown logfmt field breakdown, level filter 1h defaults 96 ms 111 ms ⚪ +16% 107 ms 1.04× ✅ same
⚪ DL3 drilldown logfmt field breakdown, level filter 1h aligned 99 ms 95 ms ⚪ -4% 110 ms 0.86× ✅ same
⚪ DL4 instant count, level filter, json+logfmt, 1h instant defaults 284 ms 293 ms ⚪ +3% 1.36 s 0.21× ✅ same
⚪ DL6 explore volume, level filter before json 1h defaults 36 ms 34 ms ⚪ -6% 84 ms 0.40× ✅ same
⚪ DL6 explore volume, level filter before json 1h aligned 36 ms 37 ms ⚪ +3% 75 ms 0.49× ✅ same
⚪ N1 sum by app of max by app,pod, count 1h defaults 18 ms 13 ms ⚪ -28% 49 ms 0.27× ✅ same
⚪ N1 sum by app of max by app,pod, count 1h aligned 16 ms 17 ms ⚪ +6% 61 ms 0.28× ✅ same
⚪ N10 instant min of avg, rate instant defaults 14 ms 15 ms ⚪ +7% 94 ms 0.16× ✅ same
⚪ N11 instant three levels instant defaults 8 ms 10 ms ⚪ +25% 68 ms 0.15× ✅ same
⚪ N12 instant json inner, count of sum instant defaults 59 ms 62 ms ⚪ +5% 86 ms 0.72× ✅ same
⚪ N13 instant without under by instant defaults 31 ms 24 ms ⚪ -23% 88 ms 0.27× ✅ same
⚪ N14 sliding sum of max 1h defaults 33 ms 30 ms ⚪ -9% 118 ms 0.25× ✅ same
⚪ N14 sliding sum of max 1h aligned 31 ms 32 ms ⚪ +3% 141 ms 0.23× ✅ same
⚪ N15 sliding sums only 1h defaults 6 ms 7 ms ⚪ +17% 77 ms 0.09× ✅ same
⚪ N15 sliding sums only 1h aligned 5 ms 6 ms ⚪ +20% 64 ms 0.09× ✅ same
⚪ N16 innermost without under by, tumbling 1h defaults 12 ms 15 ms ⚪ +25% 43 ms 0.35× ✅ same
⚪ N16 innermost without under by, tumbling 1h aligned 11 ms 11 ms ⚪ +0% 40 ms 0.27× ✅ same
⚪ N2 max by namespace of sum by namespace,app, rate 1h defaults 6 ms 6 ms ⚪ +0% 31 ms 0.19× ✅ same
⚪ N2 max by namespace of sum by namespace,app, rate 1h aligned 7 ms 8 ms ⚪ +14% 29 ms 0.28× ✅ same
⚪ N3 count by namespace of sum by namespace,app 1h defaults 5 ms 5 ms ⚪ +0% 30 ms 0.17× ✅ same
⚪ N3 count by namespace of sum by namespace,app 1h aligned 7 ms 7 ms ⚪ +0% 25 ms 0.28× ✅ same
⚪ N4 avg by app of min by app,pod 1h defaults 22 ms 26 ms ⚪ +18% 43 ms 0.60× ✅ same
⚪ N4 avg by app of min by app,pod 1h aligned 11 ms 12 ms ⚪ +9% 31 ms 0.39× ✅ same
⚪ N5 three levels, max min sum 1h defaults 6 ms 6 ms ⚪ +0% 31 ms 0.19× ✅ same
⚪ N5 three levels, max min sum 1h aligned 8 ms 7 ms ⚪ -12% 25 ms 0.28× ✅ same
⚪ N6 json inner, sum of max 1h defaults 8 ms 10 ms ⚪ +25% 32 ms 0.31× ✅ same
⚪ N6 json inner, sum of max 1h aligned 8 ms 9 ms ⚪ +12% 40 ms 0.22× ✅ same
⚪ N7 logfmt inner, max of sum 1h defaults 4 ms 4 ms ⚪ +0% 9 ms 0.44× ✅ same
⚪ N7 logfmt inner, max of sum 1h aligned 6 ms 6 ms ⚪ +0% 11 ms 0.55× ✅ same
⚪ N8 without over a named by level, tumbling 1h defaults 10 ms 11 ms ⚪ +10% 36 ms 0.31× ✅ same
⚪ N8 without over a named by level, tumbling 1h aligned 12 ms 12 ms ⚪ +0% 41 ms 0.29× ✅ same
⚪ N9 instant sum of max instant defaults 22 ms 18 ms ⚪ -18% 87 ms 0.21× ✅ same
⚪ OR1 logs, or alternatives 1h defaults 67 ms 61 ms ⚪ -9% 72 ms 0.85× ✅ same
⚪ OR2 logs, negated or alternatives 1h defaults 52 ms 53 ms ⚪ +2% 63 ms 0.84× ✅ same
⚪ OR3 logs, regexp or alternatives 1h defaults 36 ms 38 ms ⚪ +6% 78 ms 0.49× ✅ same
⚪ OR4 count by level, or alternatives with parser 1h defaults 38 ms 36 ms ⚪ -5% 45 ms 0.80× ✅ same
⚪ OR4 count by level, or alternatives with parser 1h aligned 36 ms 36 ms ⚪ +0% 84 ms 0.43× ✅ same
⚪ OR5 rate, negated regexp or alternatives 1h defaults 12 ms 11 ms ⚪ -8% 95 ms 0.12× ✅ same
⚪ OR5 rate, negated regexp or alternatives 1h aligned 10 ms 11 ms ⚪ +10% 108 ms 0.10× ✅ same
⚪ OR6 instant, or alternatives instant defaults 6 ms 7 ms ⚪ +17% 64 ms 0.11× ✅ same
⚪ P1 api-gateway empty pattern 1h defaults 31 ms 27 ms ⚪ -13% 17 ms 1.59× ✅ same
⚪ P2 api-gateway not empty pattern, line filter 1h defaults 77 ms 70 ms ⚪ -9% 27 ms 2.59× ✅ same
⚪ P3 nginx count_over_time, pattern with spaces 1h defaults 5 ms 5 ms ⚪ +0% 8 ms 0.62× ✅ same
⚪ P3 nginx count_over_time, pattern with spaces 1h aligned 4 ms 4 ms ⚪ +0% 8 ms 0.50× ✅ same
⚪ P4 nginx count_over_time, GET request pattern 1h defaults 4 ms 5 ms ⚪ +25% 7 ms 0.71× ✅ same
⚪ P4 nginx count_over_time, GET request pattern 1h aligned 4 ms 5 ms ⚪ +25% 6 ms 0.83× ✅ same
⚪ A1 nginx include GET, log query 1h defaults 13 ms 13 ms ⚪ +0% 12 ms 1.08× ✅ same
⚪ A2 nginx exclude GET, log query 1h defaults 13 ms 13 ms ⚪ +0% 13 ms 1.00× ✅ same
⚪ A3 nginx include GET, count_over_time 1h defaults 4 ms 4 ms ⚪ +0% 7 ms 0.57× ✅ same
⚪ A3 nginx include GET, count_over_time 1h aligned 4 ms 4 ms ⚪ +0% 7 ms 0.57× ✅ same
⚪ A4 nginx exclude GET, count_over_time 1h defaults 4 ms 3 ms ⚪ -25% 6 ms 0.50× ✅ same
⚪ A4 nginx exclude GET, count_over_time 1h aligned 4 ms 5 ms ⚪ +25% 6 ms 0.83× ✅ same
⚪ A5 drilldown exclude, volume by detected_level 1h defaults 7 ms 7 ms ⚪ +0% 6 ms 1.17× ✅ same
⚪ A5 drilldown exclude, volume by detected_level 1h aligned 9 ms 9 ms ⚪ +0% 5 ms 1.80× ✅ same
⚪ A6 nginx include ends on a literal, log query 1h defaults 16 ms 15 ms ⚪ -6% 5 ms 3.00× ✅ same
⚪ A7 nginx exclude ends on a literal, log query 1h defaults 14 ms 13 ms ⚪ -7% 12 ms 1.08× ✅ same
⚪ A8 nginx include two literals, count_over_time 1h defaults 3 ms 4 ms ⚪ +33% 6 ms 0.67× ✅ same
⚪ A8 nginx include two literals, count_over_time 1h aligned 4 ms 4 ms ⚪ +0% 5 ms 0.80× ✅ same
⚪ A9 nginx include two literals, ends on a literal, count_over_time 1h defaults 4 ms 3 ms ⚪ -25% 6 ms 0.50× ✅ same
⚪ A9 nginx include two literals, ends on a literal, count_over_time 1h aligned 5 ms 4 ms ⚪ -20% 4 ms 1.00× ✅ same
⚪ P1 logs, json, level equals 1h defaults 94 ms 95 ms ⚪ +1% 77 ms 1.23× ✅ same
⚪ P2 logs, logfmt, level not equal 1h defaults 33 ms 32 ms ⚪ -3% 7 ms 4.57× ✅ same
⚪ P3 logs, json, level existence 1h defaults 95 ms 96 ms ⚪ +1% 72 ms 1.33× ✅ same
⚪ P4 logfmt count by level 1h defaults 5 ms 5 ms ⚪ +0% 7 ms 0.71× ✅ same
⚪ P4 logfmt count by level 1h aligned 5 ms 5 ms ⚪ +0% 8 ms 0.62× ✅ same
⚪ P5 json count by level 1h defaults 36 ms 36 ms ⚪ +0% 17 ms 2.12× ✅ same
⚪ P5 json count by level 1h aligned 36 ms 37 ms ⚪ +3% 24 ms 1.54× ✅ same
⚪ P6 json count, level filter 1h defaults 4 ms 4 ms ⚪ +0% 14 ms 0.29× ✅ same
⚪ P6 json count, level filter 1h aligned 4 ms 4 ms ⚪ +0% 13 ms 0.31× ✅ same
⚪ P7 json rate by level, level regexp 1h defaults 5 ms 4 ms ⚪ -20% 16 ms 0.25× ✅ same
⚪ P7 json rate by level, level regexp 1h aligned 5 ms 5 ms ⚪ +0% 15 ms 0.33× ✅ same
⚪ P8 json count by a name that is no stream label 1h defaults 37 ms 36 ms ⚪ -3% 16 ms 2.25× ✅ same
⚪ P8 json count by a name that is no stream label 1h aligned 36 ms 37 ms ⚪ +3% 13 ms 2.85× ✅ same
⚪ P9 instant logfmt by level instant defaults 6 ms 5 ms ⚪ -17% 9 ms 0.56× ✅ same
⚪ F1 sum by over a ratio of two per-stream metrics, 20s step 1h defaults 59 ms 61 ms ⚪ +3% 90.08 s (0) — ➖ differs (as base)
⚪ F1 sum by over a ratio of two per-stream metrics, 20s step 1h aligned 71 ms 65 ms ⚪ -8% 575 ms 0.11× ➖ differs (as base)
⚪ F2 count by service of count_over_time, 20s step 1h defaults 2 ms 2 ms ⚪ +0% 269 ms 0.01× ➖ differs (as base)
⚪ F2 count by service of count_over_time, 20s step 1h aligned 2 ms 2 ms ⚪ +0% 260 ms 0.01× ➖ differs (as base)
⚪ F3 avg by service of rate, 20s step 1h defaults 23 ms 26 ms ⚪ +13% 319 ms 0.08× ➖ differs (as base)
⚪ F3 avg by service of rate, 20s step 1h aligned 25 ms 23 ms ⚪ -8% 314 ms 0.07× ➖ differs (as base)
⚪ F4 sum of max by service,app, 20s step 1h defaults 48 ms 52 ms ⚪ +8% 283 ms 0.18× ➖ differs (as base)
⚪ F4 sum of max by service,app, 20s step 1h aligned 32 ms 39 ms ⚪ +22% 268 ms 0.15× ➖ differs (as base)
⚪ SW1 sum without pod, count_over_time 1h defaults 17 ms 15 ms ⚪ -12% 57 ms 0.26× ✅ same
⚪ SW1 sum without pod, count_over_time 1h aligned 15 ms 17 ms ⚪ +13% 63 ms 0.27× ✅ same
⚪ SW2 sum without pod, bytes_over_time 1h defaults 16 ms 16 ms ⚪ +0% 49 ms 0.33× ✅ same
⚪ SW2 sum without pod, bytes_over_time 1h aligned 15 ms 15 ms ⚪ +0% 48 ms 0.31× ✅ same
⚪ SW3 sum without pod and version, line filter 1h defaults 16 ms 17 ms ⚪ +6% 45 ms 0.38× ✅ same
⚪ SW3 sum without pod and version, line filter 1h aligned 19 ms 17 ms ⚪ -11% 49 ms 0.35× ✅ same
⚪ SW4 trailing sum without pod 1h defaults 5 ms 5 ms ⚪ +0% 73 ms 0.07× ✅ same
⚪ SW4 trailing sum without pod 1h aligned 5 ms 6 ms ⚪ +20% 50 ms 0.12× ✅ same
⚪ SW5 sum without pod, rate (control) 1h defaults 18 ms 17 ms ⚪ -6% 46 ms 0.37× ✅ same
⚪ SW5 sum without pod, rate (control) 1h aligned 21 ms 21 ms ⚪ +0% 49 ms 0.43× ✅ same
⚪ SW6 max without pod (control) 1h defaults 10 ms 11 ms ⚪ +10% 45 ms 0.24× ✅ same
⚪ SW6 max without pod (control) 1h aligned 12 ms 15 ms ⚪ +25% 49 ms 0.31× ✅ same
⚪ SF1 logs, json extraction list 1h defaults 64 ms 69 ms ⚪ +8% 59 ms 1.17× ✅ same
⚪ SF10 volume, structured-metadata filter 1h defaults 8 ms 8 ms ⚪ +0% 48 ms 0.17× ✅ same
⚪ SF10 volume, structured-metadata filter 1h aligned 8 ms 8 ms ⚪ +0% 38 ms 0.21× ✅ same
⚪ SF2 logs, logfmt extraction list 1h defaults 89 ms 99 ms ⚪ +11% 61 ms 1.62× ✅ same
⚪ SF3 logs, json then line_format 1h defaults 67 ms 65 ms ⚪ -3% 73 ms 0.89× ✅ same
⚪ SF4 logs, line_format without a parser 1h defaults 52 ms 53 ms ⚪ +2% 50 ms 1.06× ✅ same
⚪ SF5 logs, regexp capture 1h defaults 107 ms 109 ms ⚪ +2% 60 ms 1.82× ✅ same
⚪ SF6 logs, structured-metadata filter 1h defaults 47 ms 43 ms ⚪ -9% 146 ms 0.29× ✅ same
⚪ SF7 logs, filter on a line key without a parser 1h defaults 53 ms 52 ms ⚪ -2% 38 ms 1.37× ✅ same
⚪ SF8 volume, json extraction list 1h defaults 7 ms 6 ms ⚪ -14% 92 ms 0.07× ✅ same
⚪ SF8 volume, json extraction list 1h aligned 5 ms 4 ms ⚪ -20% 60 ms 0.07× ✅ same
⚪ SF9 volume, logfmt label_format rename 1h defaults 15 ms 14 ms ⚪ -7% 84 ms 0.17× ✅ same
⚪ SF9 volume, logfmt label_format rename 1h aligned 16 ms 15 ms ⚪ -6% 71 ms 0.21× ✅ same
⚪ SL1 labels tab by version, level pill 1h defaults 10 ms 10 ms ⚪ +0% 14 ms 0.71× ✅ same
⚪ SL1 labels tab by version, level pill 1h aligned 10 ms 10 ms ⚪ +0% 18 ms 0.56× ✅ same
⚪ SL2 labels tab by version 1h defaults 8 ms 7 ms ⚪ -12% 21 ms 0.33× ✅ same
⚪ SL2 labels tab by version 1h aligned 4 ms 4 ms ⚪ +0% 9 ms 0.44× ✅ same
⚪ SL3 labels tab by cluster (not shadowed) 1h defaults 4 ms 5 ms ⚪ +25% 15 ms 0.33× ✅ same
⚪ SL3 labels tab by cluster (not shadowed) 1h aligned 5 ms 5 ms ⚪ +0% 20 ms 0.25× ✅ same
⚪ SL4 field breakdown by span_id (structured metadata, no stream label) 1h defaults 42 ms 55 ms ⚪ +31% 40 ms 1.38× ✅ same
⚪ SL4 field breakdown by span_id (structured metadata, no stream label) 1h aligned 54 ms 81 ms ⚪ +50% 54 ms 1.50× ✅ same
⚪ E1 json duration_ms sum by service 1h defaults 8 ms 7 ms ⚪ -12% 23 ms 0.30× ✅ same
⚪ E1 json duration_ms sum by service 1h aligned 10 ms 7 ms ⚪ -30% 26 ms 0.27× ✅ same
⚪ E2 json duration_ms p95 by service 1h defaults 14 ms 13 ms ⚪ -7% 19 ms 0.68× ✅ same
⚪ E2 json duration_ms p95 by service 1h aligned 13 ms 14 ms ⚪ +8% 18 ms 0.78× ✅ same
⚪ E3 logfmt latency_ms rate, production 1h defaults 11 ms 11 ms ⚪ +0% 165 ms 0.07× ➖ differs (as base)
⚪ E3 logfmt latency_ms rate, production 1h aligned 11 ms 10 ms ⚪ -9% 154 ms 0.06× ➖ differs (as base)
⚪ E4 logfmt size_bytes max by service 1h defaults 8 ms 8 ms ⚪ +0% 21 ms 0.38× ✅ same
⚪ E4 logfmt size_bytes max by service 1h aligned 5 ms 5 ms ⚪ +0% 18 ms 0.28× ✅ same
⚪ E5 json duration_ms sum, instant instant defaults 29 ms 30 ms ⚪ +3% 28 ms 1.07× ✅ same
⚪ E6 logfmt ttl unit string (Loki 400) 1h defaults 12 ms (400) 12 ms (400) ⚪ +0% 20 ms (400) — ✅ same
⚪ E6 logfmt ttl unit string (Loki 400) 1h aligned 12 ms (400) 10 ms (400) ⚪ -17% 16 ms (400) — ✅ same
⚪ E7 json hexadecimal trace_id (Loki 400) 1h defaults 14 ms (400) 14 ms (400) ⚪ +0% 23 ms (400) — ✅ same
⚪ E7 json hexadecimal trace_id (Loki 400) 1h aligned 14 ms (400) 13 ms (400) ⚪ -7% 24 ms (400) — ✅ same
⚪ E8 json duration_ms sum by service, namespace prod 1h defaults 11 ms 10 ms ⚪ -9% 114 ms 0.09× ✅ same
⚪ E8 json duration_ms sum by service, namespace prod 1h aligned 9 ms 9 ms ⚪ +0% 115 ms 0.08× ✅ same
⚪ E9 logfmt latency_ms sum by service, namespace prod 1h defaults 9 ms 8 ms ⚪ -11% 108 ms 0.07× ✅ same
⚪ E9 logfmt latency_ms sum by service, namespace prod 1h aligned 7 ms 7 ms ⚪ +0% 101 ms 0.07× ✅ same
⚪ G1 logfmt amount sum_over_time, no filter 1h defaults 5 ms 5 ms ⚪ +0% 16 ms 0.31× ✅ same
⚪ G1 logfmt amount sum_over_time, no filter 1h aligned 6 ms 5 ms ⚪ -17% 20 ms 0.25× ✅ same
⚪ G10 logfmt latency_ms sum_over_time, production 1h defaults 9 ms 10 ms ⚪ +11% 263 ms 0.04× ➖ differs (as base)
⚪ G10 logfmt latency_ms sum_over_time, production 1h aligned 8 ms 9 ms ⚪ +12% 187 ms 0.05× ➖ differs (as base)
⚪ G11 logfmt amount sum_over_time, instant instant defaults 7 ms 7 ms ⚪ +0% 13 ms 0.54× ✅ same
⚪ G12 json duration_ms sum_over_time, instant instant defaults 46 ms 45 ms ⚪ -2% 31 ms 1.45× ✅ same
⚪ G2 json duration_ms sum_over_time, no filter 1h defaults 6 ms 7 ms ⚪ +17% 38 ms 0.18× ✅ same
⚪ G2 json duration_ms sum_over_time, no filter 1h aligned 6 ms 7 ms ⚪ +17% 42 ms 0.17× ✅ same
⚪ G3 logfmt amount sum_over_time, error filter 1h defaults 5 ms 5 ms ⚪ +0% 14 ms 0.36× ✅ same
⚪ G3 logfmt amount sum_over_time, error filter 1h aligned 6 ms 5 ms ⚪ -17% 13 ms 0.38× ✅ same
⚪ G4 json duration_ms sum_over_time, error filter 1h defaults 6 ms 7 ms ⚪ +17% 32 ms 0.22× —
⚪ G4 json duration_ms sum_over_time, error filter 1h aligned 6 ms 7 ms ⚪ +17% 31 ms 0.23× ✅ same
⚪ G5 logfmt amount sum by rate 1h defaults 5 ms 5 ms ⚪ +0% 14 ms 0.36× —
⚪ G5 logfmt amount sum by rate 1h aligned 6 ms 5 ms ⚪ -17% 13 ms 0.38× —
⚪ G6 json duration_ms sum by rate 1h defaults 6 ms 7 ms ⚪ +17% 35 ms 0.20× ✅ same
⚪ G6 json duration_ms sum by rate 1h aligned 7 ms 7 ms ⚪ +0% 31 ms 0.23× ✅ same
⚪ G7 duration() of a unit string 1h defaults 39 ms 43 ms ⚪ +10% 23 ms 1.87× ✅ same
⚪ G7 duration() of a unit string 1h aligned 16 ms 16 ms ⚪ +0% 13 ms 1.23× ✅ same
⚪ G8 bytes() of a number 1h defaults 12 ms 12 ms ⚪ +0% 10 ms 1.20× ✅ same
⚪ G8 bytes() of a number 1h aligned 12 ms 12 ms ⚪ +0% 10 ms 1.20× ✅ same
⚪ G9 json duration_ms max_over_time 1h defaults 6 ms 6 ms ⚪ +0% 143 ms 0.04× ✅ same
⚪ G9 json duration_ms max_over_time 1h aligned 7 ms 7 ms ⚪ +0% 156 ms 0.04× ✅ same
⚪ W1 sum without pod, max_over_time 1h defaults 7 ms 7 ms ⚪ +0% 19 ms 0.37× ✅ same
⚪ W1 sum without pod, max_over_time 1h aligned 7 ms 6 ms ⚪ -14% 20 ms 0.30× ✅ same
⚪ W2 sum without pod, sum_over_time 1h defaults 7 ms 7 ms ⚪ +0% 17 ms 0.41× ✅ same
⚪ W2 sum without pod, sum_over_time 1h aligned 7 ms 7 ms ⚪ +0% 16 ms 0.44× ✅ same
⚪ W3 sum without pod, rate 1h defaults 8 ms 9 ms ⚪ +12% 18 ms 0.50× ✅ same
⚪ W3 sum without pod, rate 1h aligned 12 ms 8 ms ⚪ -33% 16 ms 0.50× ✅ same
⚪ W4 max without pod, max_over_time 1h defaults 3 ms 3 ms ⚪ +0% 18 ms 0.17× ✅ same
⚪ W4 max without pod, max_over_time 1h aligned 3 ms 3 ms ⚪ +0% 15 ms 0.20× ✅ same
⚪ W5 sum without pod, max_over_time, instant instant defaults 7 ms 7 ms ⚪ +0% 15 ms 0.47× ✅ same
⚪ W6 sum without pod, rate, instant instant defaults 7 ms 7 ms ⚪ +0% 14 ms 0.50× ✅ same
⚪ W7 topk 5 of sum without pod 1h defaults 6 ms 7 ms ⚪ +17% 37 ms 0.19× ✅ same
⚪ W7 topk 5 of sum without pod 1h aligned 3 ms 3 ms ⚪ +0% 16 ms 0.19× ✅ same
⚪ W8 sum without pod, count_over_time (production) 1h defaults 17 ms 14 ms ⚪ -18% 60 ms 0.23× ✅ same
⚪ W8 sum without pod, count_over_time (production) 1h aligned 14 ms 15 ms ⚪ +7% 62 ms 0.24× ✅ same
⚪ W9 label_replace control, instant instant defaults 6 ms 6 ms ⚪ +0% 97 ms 0.06× ✅ same
⚪ U1 logfmt amount rate 1h defaults 6 ms 5 ms ⚪ -17% 16 ms 0.31× ✅ same
⚪ U1 logfmt amount rate 1h aligned 5 ms 5 ms ⚪ +0% 16 ms 0.31× ✅ same
⚪ U2 json duration_ms rate 1h defaults 8 ms 7 ms ⚪ -12% 29 ms 0.24× ✅ same
⚪ U2 json duration_ms rate 1h aligned 7 ms 7 ms ⚪ +0% 32 ms 0.22× ✅ same
⚪ U3 json duration_ms rate, error filter 1h defaults 7 ms 6 ms ⚪ -14% 29 ms 0.21× ✅ same
⚪ U3 json duration_ms rate, error filter 1h aligned 7 ms 6 ms ⚪ -14% 31 ms 0.19× ✅ same
⚪ U4 logfmt latency_ms rate, production 1h defaults 11 ms 12 ms ⚪ +9% 162 ms 0.07× ➖ differs (as base)
⚪ U4 logfmt latency_ms rate, production 1h aligned 11 ms 11 ms ⚪ +0% 184 ms 0.06× ➖ differs (as base)
⚪ U5 logfmt amount rate, instant instant defaults 7 ms 7 ms ⚪ +0% 14 ms 0.50× ✅ same
⚪ U6 json duration_ms rate, instant instant defaults 11 ms 12 ms ⚪ +9% 24 ms 0.50× ✅ same
⚪ U7 json duration_ms sum_over_time, instant instant defaults 14 ms 13 ms ⚪ -7% 24 ms 0.54× ✅ same
⚪ U8 logfmt amount rate by service (grouped) 1h defaults 5 ms 6 ms ⚪ +20% 13 ms 0.46× ✅ same
⚪ U8 logfmt amount rate by service (grouped) 1h aligned 6 ms 6 ms ⚪ +0% 14 ms 0.43× ✅ same
⚪ U9 logfmt amount rate_counter (folded per series) 1h defaults 8 ms 9 ms ⚪ +12% 42 ms 0.21× ✅ same
⚪ U9 logfmt amount rate_counter (folded per series) 1h aligned 9 ms 9 ms ⚪ +0% 47 ms 0.19× ✅ same
⚪ U1 json duration_ms sum by service 1h defaults 7 ms 7 ms ⚪ +0% 26 ms 0.27× ✅ same
⚪ U1 json duration_ms sum by service 1h aligned 7 ms 7 ms ⚪ +0% 26 ms 0.27× ✅ same
⚪ U10 instant sum_over_time unwrap instant defaults 36 ms 36 ms ⚪ +0% 30 ms 1.20× ✅ same
⚪ U11 instant max_over_time missing label instant defaults 8 ms 9 ms ⚪ +12% 16 ms 0.56× ✅ same
⚪ U12 json duration_ms over every service 1h defaults 11 ms 10 ms ⚪ -9% 90 ms 0.11× ✅ same
⚪ U12 json duration_ms over every service 1h aligned 10 ms 11 ms ⚪ +10% 53 ms 0.21× ✅ same
⚪ U13 logfmt latency_ms over every service 1h defaults 13 ms 13 ms ⚪ +0% 82 ms 0.16× ➖ differs (as base)
⚪ U13 logfmt latency_ms over every service 1h aligned 13 ms 14 ms ⚪ +8% 85 ms 0.16× ➖ differs (as base)
⚪ U14 duration() of a unit string 1h defaults 16 ms 16 ms ⚪ +0% 8 ms 2.00× ✅ same
⚪ U14 duration() of a unit string 1h aligned 16 ms 16 ms ⚪ +0% 7 ms 2.29× ✅ same
⚪ U2 json duration_ms max by service 1h defaults 7 ms 7 ms ⚪ +0% 45 ms 0.16× ✅ same
⚪ U2 json duration_ms max by service 1h aligned 7 ms 7 ms ⚪ +0% 47 ms 0.15× ✅ same
⚪ U3 json duration_ms sliding sum 1h defaults 18 ms 13 ms ⚪ -28% 78 ms 0.17× ✅ same
⚪ U3 json duration_ms sliding sum 1h aligned 7 ms 7 ms ⚪ +0% 43 ms 0.16× ✅ same
⚪ U4 logfmt size_bytes sum by service 1h defaults 5 ms 6 ms ⚪ +20% 10 ms 0.60× ✅ same
⚪ U4 logfmt size_bytes sum by service 1h aligned 6 ms 6 ms ⚪ +0% 9 ms 0.67× ✅ same
⚪ U5 logfmt ttl unit string (no sample) 1h defaults 6 ms 6 ms ⚪ +0% 7 ms 0.86× ✅ same
⚪ U5 logfmt ttl unit string (no sample) 1h aligned 6 ms 5 ms ⚪ -17% 7 ms 0.71× ✅ same
⚪ U6 missing label, no parser 1h defaults 10 ms 10 ms ⚪ +0% 13 ms 0.77× ✅ same
⚪ U6 missing label, no parser 1h aligned 11 ms 11 ms ⚪ +0% 12 ms 0.92× ✅ same
⚪ U7 missing label, ungrouped sum 1h defaults 5 ms 5 ms ⚪ +0% 13 ms 0.38× ✅ same
⚪ U7 missing label, ungrouped sum 1h aligned 5 ms 5 ms ⚪ +0% 11 ms 0.45× ✅ same
⚪ U8 rate of an unwrapped label 1h defaults 6 ms 7 ms ⚪ +17% 18 ms 0.39× ✅ same
⚪ U8 rate of an unwrapped label 1h aligned 7 ms 7 ms ⚪ +0% 16 ms 0.44× ✅ same
⚪ U9 bytes() conversion 1h defaults 15 ms 12 ms ⚪ -20% 14 ms 0.86× ✅ same
⚪ U9 bytes() conversion 1h aligned 12 ms 12 ms ⚪ +0% 13 ms 0.92× ✅ same
Cold (first-run) timings — what a user opening a panel sees
shape range Loki profile base cold PR cold Loki cold PR ÷ Loki cold
B1 sum by over rate divided by a literal 1h defaults 33 ms 26 ms 263 ms 0.10×
B1 sum by over rate divided by a literal 1h aligned 28 ms 21 ms 244 ms 0.09×
B2 sum by over a ratio of two per-stream metrics 1h defaults 599 ms 570 ms 90.09 s (0) —
B2 sum by over a ratio of two per-stream metrics 1h aligned 577 ms 580 ms 90.02 s (0) —
B3 sum over a literal times count, instant instant defaults 15 ms 17 ms 26 ms 0.65×
B4 outer sum over ignoring(machine) 1h defaults 142 ms 145 ms 794 ms 0.18×
B4 outer sum over ignoring(machine) 1h aligned 141 ms 141 ms 802 ms 0.18×
bytes_over_time by app 1h defaults 105 ms 120 ms 866 ms 0.14×
bytes_over_time by app 1h aligned 100 ms 102 ms 876 ms 0.12×
detected_level volume 1h defaults 118 ms 92 ms 1.07 s 0.09×
detected_level volume 1h aligned 85 ms 93 ms 833 ms 0.11×
drilldown detected_level 1h defaults 103 ms 79 ms 811 ms 0.10×
drilldown detected_level 1h aligned 85 ms 76 ms 790 ms 0.10×
drilldown level volume 1h defaults 16 ms 17 ms 809 ms 0.02×
drilldown level volume 1h aligned 17 ms 17 ms 792 ms 0.02×
drilldown service landing 1h defaults 32 ms 69 ms 1.03 s 0.07×
drilldown service landing 1h aligned 35 ms 33 ms 829 ms 0.04×
instant json filtered instant defaults 57 ms 42 ms 115 ms 0.37×
instant json volume instant defaults 57 ms 58 ms 138 ms 0.42×
instant ungrouped rate instant defaults 15 ms 15 ms 117 ms 0.13×
json rate by level (no filter, no drop) 1h defaults 16 ms (400) 55 ms (400) 219 ms (400) —
json rate by level (no filter, no drop) 1h aligned 13 ms (400) 15 ms (400) 210 ms (400) —
json volume no filters 1h defaults 219 ms 218 ms 1.03 s 0.21×
json volume no filters 1h aligned 300 ms 263 ms 1.12 s 0.23×
logfmt count by level, filter, drop 1h defaults 437 ms 448 ms 1.59 s 0.28×
logfmt count by level, filter, drop 1h aligned 444 ms 437 ms 1.33 s 0.33×
logfmt volume 1h defaults 250 ms 246 ms 1.50 s 0.16×
logfmt volume 1h aligned 249 ms 244 ms 1.51 s 0.16×
logs plain 1h defaults 59 ms 36 ms 1.80 s 0.02×
logs | json 1h defaults 153 ms 146 ms 104 ms 1.40×
logs | logfmt 1h defaults 109 ms 100 ms 97 ms 1.03×
plain volume 1h defaults 17 ms 18 ms 1.19 s 0.02×
plain volume 1h aligned 20 ms 23 ms 834 ms 0.03×
stream-label count by app 1h defaults 54 ms 59 ms 860 ms 0.07×
stream-label count by app 1h aligned 55 ms 59 ms 782 ms 0.08×
topk rate by app 1h defaults 22 ms 23 ms 882 ms 0.03×
topk rate by app 1h aligned 20 ms 23 ms 883 ms 0.03×
ungrouped rate 1h defaults 129 ms 127 ms 837 ms 0.15×
ungrouped rate 1h aligned 127 ms 129 ms 863 ms 0.15×
DB1 label breakdown pod 1h defaults 224 ms 228 ms 1.26 s 0.18×
DB1 label breakdown pod 1h aligned 239 ms 213 ms 851 ms 0.25×
DB2 label breakdown namespace 1h defaults 73 ms 73 ms 933 ms 0.08×
DB2 label breakdown namespace 1h aligned 71 ms 69 ms 611 ms 0.11×
DB3 json field breakdown user_id 1h defaults 126 ms 100 ms 715 ms 0.14×
DB3 json field breakdown user_id 1h aligned 97 ms 104 ms 599 ms 0.17×
DB4 json field breakdown batch_id 1h defaults 127 ms 120 ms 842 ms 0.14×
DB4 json field breakdown batch_id 1h aligned 122 ms 121 ms 578 ms 0.21×
JP1 drilldown fields breakdown, JSON path, level pill 1h defaults 47 ms 42 ms 76 ms 0.55×
JP1 drilldown fields breakdown, JSON path, level pill 1h aligned 52 ms 42 ms 104 ms 0.40×
JP2 drilldown fields breakdown, JSON path 1h defaults 68 ms 71 ms 111 ms 0.64×
JP2 drilldown fields breakdown, JSON path 1h aligned 70 ms 71 ms 161 ms 0.44×
X1 json filter level_extracted, by level 1h defaults 1.05 s 1.05 s 661 ms 1.59×
X1 json filter level_extracted, by level 1h aligned 1.02 s 1.02 s 820 ms 1.24×
X2 json group by level_extracted 1h defaults 331 ms 331 ms 670 ms 0.49×
X2 json group by level_extracted 1h aligned 328 ms 330 ms 899 ms 0.37×
X3 json rate, level_extracted equality 1h defaults 296 ms 294 ms 611 ms 0.48×
X3 json rate, level_extracted equality 1h aligned 298 ms 300 ms 728 ms 0.41×
X4 json bytes, level_extracted regexp 1h defaults 395 ms 395 ms 601 ms 0.66×
X4 json bytes, level_extracted regexp 1h aligned 387 ms 380 ms 842 ms 0.45×
X5 logfmt filter level_extracted, by level 1h defaults 707 ms 677 ms 759 ms 0.89×
X5 logfmt filter level_extracted, by level 1h aligned 689 ms 706 ms 1.15 s 0.61×
E1 logs, json parser over stream labels 1h defaults 82 ms 61 ms 65 ms † —
E2 logs, logfmt parser over stream labels 1h defaults 42 ms 57 ms 55 ms † —
E3 logs, json, existence filter on level_extracted 1h defaults 92 ms 75 ms 67 ms † —
E4 logs, logfmt, existence filter on level_extracted 1h defaults 47 ms 61 ms 60 ms † —
E5 logs, json, drop level_extracted 1h defaults 79 ms 78 ms 63 ms † —
E6 logfmt count by level_extracted 1h defaults 45 ms 47 ms 50 ms 0.94×
E6 logfmt count by level_extracted 1h aligned 63 ms 54 ms 46 ms 1.17×
E7 json count by level_extracted 1h defaults 381 ms 344 ms 189 ms 1.82×
E7 json count by level_extracted 1h aligned 349 ms 345 ms 153 ms 2.25×
E8 instant logfmt by level_extracted instant defaults 7 ms 8 ms 10 ms 0.80×
IP1 logs, addr=ip(single), label absent 1h defaults 44 ms 42 ms 67 ms † —
IP2 logs, json ip=ip(CIDR) 1h defaults 116 ms 139 ms 102 ms † —
IP3 logs, json ip!=ip(CIDR) 1h defaults 91 ms 79 ms 212 ms † —
IP4 count, json ip=ip(CIDR) 1h defaults 126 ms 142 ms 138 ms 1.03×
IP4 count, json ip=ip(CIDR) 1h aligned 167 ms 133 ms 153 ms 0.87×
IP5 count, json ip=ip(range) 1h defaults 82 ms 97 ms 54 ms 1.80×
IP5 count, json ip=ip(range) 1h aligned 77 ms 83 ms 58 ms 1.43×
DLV1 drilldown logs volume, json 1h defaults 183 ms 166 ms 177 ms 0.94×
DLV1 drilldown logs volume, json 1h aligned 173 ms 164 ms 211 ms 0.78×
DLV2 json error filter, detected_level 1h defaults 429 ms 418 ms 1.16 s 0.36×
DLV2 json error filter, detected_level 1h aligned 435 ms 425 ms 933 ms 0.46×
DLV3 plain json, detected_level 1h defaults 18 ms 18 ms 184 ms 0.10×
DLV3 plain json, detected_level 1h aligned 19 ms 18 ms 215 ms 0.08×
DLV4 explore json volume, level and detected_level 1h defaults 82 ms 84 ms 178 ms 0.47×
DLV4 explore json volume, level and detected_level 1h aligned 84 ms 83 ms 197 ms 0.42×
DLV5 json error dropped, detected_level 1h defaults 38 ms 20 ms 864 ms 0.02×
DLV5 json error dropped, detected_level 1h aligned 17 ms 16 ms 904 ms 0.02×
DLV6 drilldown detected_level breakdown, json 1h defaults 2 ms 2 ms 812 ms 0.00×
DLV6 drilldown detected_level breakdown, json 1h aligned 3 ms 2 ms 895 ms 0.00×
DLV7 plain json, detected_level, 30s range (shorter than the 24h step) 1h defaults 2 ms 2 ms 172 ms 0.01×
DLV7 plain json, detected_level, 30s range (shorter than the 24h step) 1h aligned 2 ms 4 ms 192 ms 0.02×
J1 json no-error count by service_name, one service 1h defaults 178 ms 175 ms 200 ms 0.87×
J1 json no-error count by service_name, one service 1h aligned 182 ms 177 ms 205 ms 0.86×
J2 json no-error count by app, namespace 1h defaults 429 ms 422 ms 860 ms 0.49×
J2 json no-error count by app, namespace 1h aligned 431 ms 429 ms 738 ms 0.58×
J3 json no-error count by parsed method 1h defaults 150 ms 165 ms 199 ms 0.83×
J3 json no-error count by parsed method 1h aligned 150 ms 150 ms 203 ms 0.74×
J4 json no-error count by service_name, all services 1h defaults 491 ms 527 ms 832 ms 0.63×
J4 json no-error count by service_name, all services 1h aligned 499 ms 505 ms 987 ms 0.51×
J5 json no-error bytes_rate by app 1h defaults 284 ms 274 ms 615 ms 0.45×
J5 json no-error bytes_rate by app 1h aligned 266 ms 267 ms 670 ms 0.40×
A explore volume, 2 filters, drop 1h defaults 1.10 s 1.08 s 750 ms 1.45×
A explore volume, 2 filters, drop 1h aligned 1.20 s 1.07 s 702 ms 1.52×
B grouped sum, filter, no drop 1h defaults 121 ms 122 ms 681 ms 0.18×
B grouped sum, filter, no drop 1h aligned 124 ms 127 ms 594 ms 0.21×
C ungrouped sum, filter, no drop 1h defaults 118 ms 120 ms 680 ms 0.18×
C ungrouped sum, filter, no drop 1h aligned 116 ms 125 ms 591 ms 0.21×
D volume, no filters 1h defaults 215 ms 209 ms 1.22 s 0.17×
D volume, no filters 1h aligned 209 ms 208 ms 832 ms 0.25×
E field breakdown pipeline (explore) 1h defaults 107 ms 108 ms 705 ms 0.15×
E field breakdown pipeline (explore) 1h aligned 105 ms 110 ms 591 ms 0.19×
F field breakdown service_version (explore) 1h defaults 1.04 s 1.15 s 815 ms 1.41×
F field breakdown service_version (explore) 1h aligned 1.01 s 1.05 s 683 ms 1.54×
G field breakdown pipeline (drilldown) 1h defaults 46 ms 45 ms 704 ms 0.06×
G field breakdown pipeline (drilldown) 1h aligned 46 ms 45 ms 563 ms 0.08×
H field breakdown service_version (drilldown) 1h defaults 62 ms 73 ms 771 ms 0.09×
H field breakdown service_version (drilldown) 1h aligned 3 ms 3 ms 671 ms 0.00×
I grafana volume of B 1h defaults 111 ms 113 ms 679 ms 0.17×
I grafana volume of B 1h aligned 111 ms 115 ms 584 ms 0.20×
K1 logs, json, keep level 1h defaults 56 ms 37 ms 51 ms † —
K2 logs, logfmt, keep level, msg 1h defaults 27 ms 32 ms 20 ms † —
K3 count of series, json, keep foo 1h defaults 74 ms 90 ms 275 ms † —
K3 count of series, json, keep foo 1h aligned 88 ms 75 ms 386 ms † —
K4 count of series, json, keep foo, instant instant defaults 61 ms 60 ms 36 ms † —
K5 rate, keep namespace 1h defaults 35 ms 23 ms 136 ms 0.17×
K5 rate, keep namespace 1h aligned 24 ms 22 ms 157 ms 0.14×
K6 count by kept key, json 1h defaults 226 ms 244 ms 146 ms 1.67×
K6 count by kept key, json 1h aligned 233 ms 228 ms 202 ms 1.13×
LF1 count by level, group then comma 1h defaults 195 ms 215 ms 733 ms 0.29×
LF1 count by level, group then comma 1h aligned 194 ms 194 ms 704 ms 0.28×
LF2 ungrouped count, comma-joined 1h defaults 192 ms 173 ms 704 ms 0.25×
LF2 ungrouped count, comma-joined 1h aligned 173 ms 174 ms 669 ms 0.26×
LF3 explore volume, group, drop 1h defaults 340 ms 340 ms 715 ms 0.48×
LF3 explore volume, group, drop 1h aligned 328 ms 343 ms 638 ms 0.54×
LF4 explore volume, two stages (control) 1h defaults 961 ms 959 ms 750 ms ↺ 1.28×
LF4 explore volume, two stages (control) 1h aligned 950 ms 959 ms 702 ms ↺ 1.37×
M1 multi-value variable, log query 1h defaults 40 ms 33 ms 37 ms 0.89×
M2 multi-value variable, count by app 1h defaults 25 ms 30 ms 172 ms 0.17×
M2 multi-value variable, count by app 1h aligned 28 ms 23 ms 188 ms 0.12×
M3 single-value variable, log query 1h defaults 16 ms 19 ms 30 ms 0.63×
M4 alternation over many streams, count 1h defaults 11 ms 11 ms 460 ms 0.02×
M4 alternation over many streams, count 1h aligned 11 ms 13 ms 585 ms 0.02×
M5 json label filter, literal alternation 1h defaults 114 ms 136 ms 171 ms 0.80×
M5 json label filter, literal alternation 1h aligned 117 ms 140 ms 209 ms 0.67×
M6 json label filter, prefix (substring in Loki) 1h defaults 31 ms 34 ms 52 ms † —
L5 label_replace over json sum by, instant instant defaults 68 ms 62 ms 30 ms 2.07×
L6 label_replace over json sum by 1h defaults 175 ms 187 ms 191 ms 0.98×
L6 label_replace over json sum by 1h aligned 186 ms 182 ms 219 ms 0.83×
L7 label_replace around a binary of two sums by level 1h defaults 37 ms 46 ms 78 ms † —
L7 label_replace around a binary of two sums by level 1h aligned 35 ms 37 ms 80 ms † —
L8 label_replace over sum by level count, instant instant defaults 7 ms 5 ms 15 ms 0.33×
LF1 logs, detected_level equals 1h defaults 110 ms 90 ms 70 ms 1.29×
LF10 drilldown logs, level pill multi-select, json service 1h defaults 99 ms 100 ms 36 ms 2.78×
LF11 drilldown logs volume by level, existing level 1h defaults 107 ms 108 ms 725 ms 0.15×
LF11 drilldown logs volume by level, existing level 1h aligned 119 ms 109 ms 621 ms 0.18×
LF12 drilldown logs volume by level, level pill 1h defaults 64 ms 50 ms 108 ms 0.46×
LF12 drilldown logs volume by level, level pill 1h aligned 43 ms 45 ms 79 ms 0.57×
LF13 explore volume, level filter before json 1h defaults 117 ms 105 ms 489 ms 0.21×
LF13 explore volume, level filter before json 1h aligned 109 ms 107 ms 355 ms 0.30×
LF14 explore volume, plain-text service 1h defaults 31 ms 41 ms 27 ms 1.52×
LF14 explore volume, plain-text service 1h aligned 36 ms 34 ms 24 ms 1.42×
LF15 drilldown field breakdown, level filter 1h defaults 36 ms 26 ms 122 ms 0.21×
LF15 drilldown field breakdown, level filter 1h aligned 28 ms 27 ms 76 ms 0.36×
LF16 drilldown label breakdown, level filter 1h defaults 46 ms 49 ms 50 ms 0.98×
LF16 drilldown label breakdown, level filter 1h aligned 50 ms 46 ms 51 ms 0.90×
LF17 detected_level count, level regexp 1h defaults 57 ms 58 ms 549 ms 0.11×
LF17 detected_level count, level regexp 1h aligned 62 ms 62 ms 423 ms 0.15×
LF18 detected_level count, level not equal 1h defaults 80 ms 81 ms 579 ms 0.14×
LF18 detected_level count, level not equal 1h aligned 83 ms 86 ms 449 ms 0.19×
LF19 detected_level count, regexp with unknown 1h defaults 49 ms 37 ms 490 ms 0.08×
LF19 detected_level count, regexp with unknown 1h aligned 39 ms 40 ms 355 ms 0.11×
LF2 logs, detected_level regexp 1h defaults 44 ms 50 ms 27 ms 1.85×
LF20 logfmt count by detected_level 1h defaults 62 ms 55 ms 70 ms 0.79×
LF20 logfmt count by detected_level 1h aligned 57 ms 60 ms 52 ms 1.15×
LF21 logfmt count by detected_level, level filter 1h defaults 57 ms 37 ms 47 ms 0.79×
LF21 logfmt count by detected_level, level filter 1h aligned 39 ms 38 ms 41 ms 0.93×
LF22 json count by detected_level, level filter 1h defaults 16 ms 15 ms 176 ms 0.09×
LF22 json count by detected_level, level filter 1h aligned 17 ms 16 ms 135 ms 0.12×
LF23 json count by level, level filter 1h defaults 53 ms 51 ms 165 ms 0.31×
LF23 json count by level, level filter 1h aligned 53 ms 53 ms 136 ms 0.39×
LF24 rate of errors by service 1h defaults 119 ms 123 ms 526 ms 0.23×
LF24 rate of errors by service 1h aligned 122 ms 127 ms 408 ms 0.31×
LF25 count of warnings, error label dropped 1h defaults 139 ms 145 ms 557 ms 0.26×
LF25 count of warnings, error label dropped 1h aligned 142 ms 142 ms 434 ms 0.33×
LF26 topk services by errors 1h defaults 11 ms 10 ms 533 ms 0.02×
LF26 topk services by errors 1h aligned 8 ms 12 ms 411 ms 0.03×
LF27 detected_level count, instant instant defaults 13 ms 28 ms 68 ms 0.41×
LF28 logs, keep detected_level 1h defaults 46 ms 47 ms 17 ms † —
LF29 logs, drop detected_level 1h defaults 59 ms 66 ms 17 ms 3.88×
LF3 logs, detected_level not equal, all services 1h defaults 49 ms 62 ms 51 ms 1.22×
LF30 logs, drop level 1h defaults 62 ms 63 ms 18 ms 3.50×
LF31 count by detected_level, level dropped 1h defaults 30 ms 42 ms 139 ms 0.30×
LF31 count by detected_level, level dropped 1h aligned 30 ms 30 ms 94 ms 0.32×
LF32 count by detected_level, detected_level kept 1h defaults 30 ms 31 ms 159 ms 0.19×
LF32 count by detected_level, detected_level kept 1h aligned 34 ms 35 ms 113 ms 0.31×
LF33 drilldown logs count, level pill, instant instant defaults 8 ms 9 ms 15 ms 0.60×
LF4 logs, detected_level regexp with unknown 1h defaults 136 ms 130 ms 112 ms 1.16×
LF5 logs, plain-text service, detected_level regexp 1h defaults 70 ms 78 ms 17 ms 4.59×
LF6 logs, json then detected_level 1h defaults 153 ms 159 ms 191 ms † —
LF7 logs, json then level equals 1h defaults 170 ms 148 ms 190 ms † —
LF8 logs, logfmt then level regexp 1h defaults 103 ms 106 ms 74 ms † —
LF9 drilldown logs, level pill, logfmt service 1h defaults 48 ms 52 ms 32 ms 1.62×
LS1 logs, level stream label 1h defaults 73 ms 65 ms 74 ms 0.88×
LS2 logs, level stream label regexp, all services 1h defaults 60 ms 66 ms 79 ms 0.84×
LS3 logs, level in the selector 1h defaults 53 ms 63 ms 40 ms 1.57×
LS4 logs, json then level_extracted 1h defaults 221 ms 207 ms 198 ms † —
LS5 logs, logfmt then level_extracted regexp 1h defaults 102 ms 96 ms 65 ms † —
LS6 level stream label count 1h defaults 11 ms 16 ms 474 ms 0.03×
LS6 level stream label count 1h aligned 18 ms 11 ms 443 ms 0.02×
LS7 rate of level stream label by service 1h defaults 22 ms 15 ms 467 ms 0.03×
LS7 rate of level stream label by service 1h aligned 16 ms 19 ms 447 ms 0.04×
LS8 json count by level_extracted, collision 1h defaults 328 ms 322 ms 137 ms 2.35×
LS8 json count by level_extracted, collision 1h aligned 330 ms 329 ms 144 ms 2.28×
O1 explore logs, underscore structured-metadata filter 1h defaults 392 ms 327 ms 393 ms † —
O1 explore logs, underscore structured-metadata filter 1h aligned 552 ms 533 ms 497 ms † —
O2 explore log volume (Grafana form), underscore structured-metadata filter 1h defaults 154 ms 158 ms 697 ms 0.23×
O2 explore log volume (Grafana form), underscore structured-metadata filter 1h aligned 153 ms 157 ms 603 ms 0.26×
O3 explore logs, dotted structured-metadata filter 1h defaults 1 ms (400) 1 ms (400) 1 ms (400) —
O3 explore logs, dotted structured-metadata filter 1h aligned 1 ms (400) 1 ms (400) 1 ms (400) —
O4 explore log volume (Grafana form), dotted structured-metadata filter 1h defaults 1 ms (400) 1 ms (400) 1 ms (400) —
O4 explore log volume (Grafana form), dotted structured-metadata filter 1h aligned 1 ms (400) 1 ms (400) 1 ms (400) —
drilldown detected fields 1h defaults 26 ms 35 ms 27 ms † —
drilldown detected fields, level pill 1h defaults 78 ms 64 ms 40 ms † —
drilldown detected labels 1h defaults 18 ms 20 ms 3 ms † —
drilldown landing volume 1h defaults 68 ms 61 ms 66 ms 0.92×
explore label values env 1h defaults 89 ms 76 ms 32 ms † —
explore label values service_name 1h defaults 29 ms 45 ms 40 ms † —
explore labels (label browser) 1h defaults 77 ms 61 ms 3 ms † —
explore labels with selector 1h defaults 78 ms 88 ms 42 ms † —
refresh label values env 1h defaults 3 ms 3 ms 32 ms † —
refresh label values service_name 1h defaults 2 ms 2 ms 38 ms † —
refresh labels (label browser) 1h defaults 2 ms 2 ms 3 ms † —
refresh labels with selector 1h defaults 2 ms 2 ms 43 ms † —
DL1 drilldown field breakdown json-expr, level filter 1h defaults 208 ms 239 ms 817 ms 0.29×
DL1 drilldown field breakdown json-expr, level filter 1h aligned 204 ms 208 ms 612 ms 0.34×
DL2 drilldown field breakdown, level + stream-label filter before json 1h defaults 62 ms 49 ms 31 ms 1.58×
DL2 drilldown field breakdown, level + stream-label filter before json 1h aligned 52 ms 49 ms 44 ms 1.11×
DL3 drilldown logfmt field breakdown, level filter 1h defaults 537 ms 498 ms 988 ms 0.50×
DL3 drilldown logfmt field breakdown, level filter 1h aligned 501 ms 491 ms 1.28 s 0.38×
DL4 instant count, level filter, json+logfmt, 1h instant defaults 290 ms 348 ms 1.60 s 0.22×
DL6 explore volume, level filter before json 1h defaults 218 ms 202 ms 768 ms 0.26×
DL6 explore volume, level filter before json 1h aligned 206 ms 199 ms 877 ms 0.23×
N1 sum by app of max by app,pod, count 1h defaults 159 ms 155 ms 940 ms 0.16×
N1 sum by app of max by app,pod, count 1h aligned 142 ms 144 ms 581 ms 0.25×
N10 instant min of avg, rate instant defaults 19 ms 15 ms 88 ms 0.17×
N11 instant three levels instant defaults 8 ms 8 ms 67 ms 0.12×
N12 instant json inner, count of sum instant defaults 54 ms 51 ms 80 ms † —
N13 instant without under by instant defaults 26 ms 35 ms 96 ms 0.36×
N14 sliding sum of max 1h defaults 456 ms 439 ms 1.33 s 0.33×
N14 sliding sum of max 1h aligned 464 ms 441 ms 1.01 s 0.44×
N15 sliding sums only 1h defaults 81 ms 56 ms 603 ms 0.09×
N15 sliding sums only 1h aligned 63 ms 57 ms 388 ms 0.15×
N16 innermost without under by, tumbling 1h defaults 104 ms 132 ms 1.33 s 0.10×
N16 innermost without under by, tumbling 1h aligned 106 ms 116 ms 760 ms 0.15×
N2 max by namespace of sum by namespace,app, rate 1h defaults 61 ms 65 ms 533 ms 0.12×
N2 max by namespace of sum by namespace,app, rate 1h aligned 53 ms 54 ms 353 ms 0.15×
N3 count by namespace of sum by namespace,app 1h defaults 49 ms 56 ms 534 ms † —
N3 count by namespace of sum by namespace,app 1h aligned 52 ms 52 ms 346 ms † —
N4 avg by app of min by app,pod 1h defaults 142 ms 142 ms 774 ms 0.18×
N4 avg by app of min by app,pod 1h aligned 130 ms 128 ms 523 ms 0.24×
N5 three levels, max min sum 1h defaults 61 ms 58 ms 551 ms 0.11×
N5 three levels, max min sum 1h aligned 61 ms 60 ms 378 ms 0.16×
N6 json inner, sum of max 1h defaults 143 ms 158 ms 451 ms 0.35×
N6 json inner, sum of max 1h aligned 143 ms 144 ms 337 ms 0.43×
N7 logfmt inner, max of sum 1h defaults 28 ms 42 ms 78 ms 0.54×
N7 logfmt inner, max of sum 1h aligned 34 ms 28 ms 54 ms 0.52×
N8 without over a named by level, tumbling 1h defaults 160 ms 159 ms 1.22 s 0.13×
N8 without over a named by level, tumbling 1h aligned 145 ms 146 ms 820 ms 0.18×
N9 instant sum of max instant defaults 16 ms 20 ms 82 ms 0.24×
OR1 logs, or alternatives 1h defaults 74 ms 55 ms 88 ms 0.62×
OR2 logs, negated or alternatives 1h defaults 51 ms 65 ms 75 ms 0.87×
OR3 logs, regexp or alternatives 1h defaults 44 ms 41 ms 85 ms 0.48×
OR4 count by level, or alternatives with parser 1h defaults 125 ms 124 ms 481 ms 0.26×
OR4 count by level, or alternatives with parser 1h aligned 130 ms 125 ms 549 ms 0.23×
OR5 rate, negated regexp or alternatives 1h defaults 220 ms 222 ms 646 ms 0.34×
OR5 rate, negated regexp or alternatives 1h aligned 233 ms 224 ms 733 ms 0.31×
OR6 instant, or alternatives instant defaults 8 ms 11 ms 64 ms 0.17×
P1 api-gateway empty pattern 1h defaults 36 ms 29 ms 100 ms † —
P2 api-gateway not empty pattern, line filter 1h defaults 64 ms 83 ms 31 ms 2.68×
P3 nginx count_over_time, pattern with spaces 1h defaults 17 ms 16 ms 33 ms † —
P3 nginx count_over_time, pattern with spaces 1h aligned 24 ms 18 ms 47 ms † —
P4 nginx count_over_time, GET request pattern 1h defaults 18 ms 30 ms 36 ms 0.83×
P4 nginx count_over_time, GET request pattern 1h aligned 19 ms 17 ms 45 ms 0.38×
A1 nginx include GET, log query 1h defaults 21 ms 14 ms 11 ms 1.27×
A2 nginx exclude GET, log query 1h defaults 17 ms 22 ms 13 ms 1.69×
A3 nginx include GET, count_over_time 1h defaults 14 ms 18 ms 27 ms 0.67×
A3 nginx include GET, count_over_time 1h aligned 23 ms 15 ms 31 ms 0.48×
A4 nginx exclude GET, count_over_time 1h defaults 22 ms 23 ms 27 ms 0.85×
A4 nginx exclude GET, count_over_time 1h aligned 18 ms 19 ms 35 ms 0.54×
A5 drilldown exclude, volume by detected_level 1h defaults 39 ms 39 ms 28 ms 1.39×
A5 drilldown exclude, volume by detected_level 1h aligned 40 ms 42 ms 29 ms 1.45×
A6 nginx include ends on a literal, log query 1h defaults 17 ms 17 ms 16 ms † —
A7 nginx exclude ends on a literal, log query 1h defaults 13 ms 13 ms 12 ms † —
A8 nginx include two literals, count_over_time 1h defaults 22 ms 22 ms 21 ms 1.05×
A8 nginx include two literals, count_over_time 1h aligned 23 ms 21 ms 25 ms 0.84×
A9 nginx include two literals, ends on a literal, count_over_time 1h defaults 21 ms 21 ms 18 ms † —
A9 nginx include two literals, ends on a literal, count_over_time 1h aligned 21 ms 20 ms 29 ms † —
P1 logs, json, level equals 1h defaults 111 ms 102 ms 102 ms † —
P2 logs, logfmt, level not equal 1h defaults 32 ms 35 ms 34 ms † —
P3 logs, json, level existence 1h defaults 98 ms 85 ms 74 ms † —
P4 logfmt count by level 1h defaults 31 ms 31 ms 43 ms 0.72×
P4 logfmt count by level 1h aligned 41 ms 34 ms 46 ms 0.74×
P5 json count by level 1h defaults 88 ms 88 ms 160 ms 0.55×
P5 json count by level 1h aligned 92 ms 90 ms 184 ms 0.49×
P6 json count, level filter 1h defaults 18 ms 21 ms 160 ms 0.13×
P6 json count, level filter 1h aligned 15 ms 20 ms 166 ms 0.12×
P7 json rate by level, level regexp 1h defaults 27 ms 16 ms 160 ms 0.10×
P7 json rate by level, level regexp 1h aligned 17 ms 17 ms 180 ms 0.09×
P8 json count by a name that is no stream label 1h defaults 98 ms 91 ms 142 ms 0.64×
P8 json count by a name that is no stream label 1h aligned 95 ms 94 ms 161 ms 0.58×
P9 instant logfmt by level instant defaults 6 ms 7 ms 9 ms 0.78×
F1 sum by over a ratio of two per-stream metrics, 20s step 1h defaults 556 ms 543 ms 90.08 s (0) —
F1 sum by over a ratio of two per-stream metrics, 20s step 1h aligned 564 ms 541 ms 11.97 s 0.05×
F2 count by service of count_over_time, 20s step 1h defaults 2 ms 2 ms 3.14 s 0.00×
F2 count by service of count_over_time, 20s step 1h aligned 2 ms 2 ms 2.68 s 0.00×
F3 avg by service of rate, 20s step 1h defaults 236 ms 246 ms 3.73 s 0.07×
F3 avg by service of rate, 20s step 1h aligned 256 ms 251 ms 3.26 s 0.08×
F4 sum of max by service,app, 20s step 1h defaults 492 ms 523 ms 3.19 s 0.16×
F4 sum of max by service,app, 20s step 1h aligned 511 ms 501 ms 3.04 s 0.16×
SW1 sum without pod, count_over_time 1h defaults 171 ms 172 ms 824 ms 0.21×
SW1 sum without pod, count_over_time 1h aligned 171 ms 164 ms 497 ms 0.33×
SW2 sum without pod, bytes_over_time 1h defaults 259 ms 267 ms 703 ms 0.38×
SW2 sum without pod, bytes_over_time 1h aligned 182 ms 193 ms 491 ms 0.39×
SW3 sum without pod and version, line filter 1h defaults 229 ms 239 ms 693 ms 0.34×
SW3 sum without pod and version, line filter 1h aligned 220 ms 230 ms 452 ms 0.51×
SW4 trailing sum without pod 1h defaults 18 ms 19 ms 685 ms 0.03×
SW4 trailing sum without pod 1h aligned 18 ms 23 ms 569 ms 0.04×
SW5 sum without pod, rate (control) 1h defaults 365 ms 368 ms 677 ms 0.54×
SW5 sum without pod, rate (control) 1h aligned 375 ms 361 ms 465 ms 0.78×
SW6 max without pod (control) 1h defaults 212 ms 203 ms 694 ms 0.29×
SW6 max without pod (control) 1h aligned 200 ms 198 ms 508 ms 0.39×
SF1 logs, json extraction list 1h defaults 73 ms 66 ms 56 ms 1.18×
SF10 volume, structured-metadata filter 1h defaults 22 ms 22 ms 383 ms 0.06×
SF10 volume, structured-metadata filter 1h aligned 24 ms 21 ms 424 ms 0.05×
SF2 logs, logfmt extraction list 1h defaults 92 ms 88 ms 55 ms 1.60×
SF3 logs, json then line_format 1h defaults 82 ms 81 ms 81 ms 1.00×
SF4 logs, line_format without a parser 1h defaults 51 ms 41 ms 48 ms 0.85×
SF5 logs, regexp capture 1h defaults 114 ms 104 ms 62 ms 1.68×
SF6 logs, structured-metadata filter 1h defaults 62 ms 43 ms 143 ms † —
SF7 logs, filter on a line key without a parser 1h defaults 68 ms 61 ms 357 ms † —
SF8 volume, json extraction list 1h defaults 50 ms 22 ms 1.19 s 0.02×
SF8 volume, json extraction list 1h aligned 32 ms 22 ms 763 ms 0.03×
SF9 volume, logfmt label_format rename 1h defaults 589 ms 511 ms 1.08 s 0.47×
SF9 volume, logfmt label_format rename 1h aligned 534 ms 515 ms 1.20 s 0.43×
SL1 labels tab by version, level pill 1h defaults 56 ms 47 ms 79 ms 0.59×
SL1 labels tab by version, level pill 1h aligned 54 ms 47 ms 108 ms 0.44×
SL2 labels tab by version 1h defaults 22 ms 26 ms 176 ms 0.15×
SL2 labels tab by version 1h aligned 23 ms 25 ms 121 ms 0.21×
SL3 labels tab by cluster (not shadowed) 1h defaults 21 ms 22 ms 115 ms 0.19×
SL3 labels tab by cluster (not shadowed) 1h aligned 21 ms 22 ms 149 ms 0.15×
SL4 field breakdown by span_id (structured metadata, no stream label) 1h defaults 96 ms 99 ms 135 ms 0.73×
SL4 field breakdown by span_id (structured metadata, no stream label) 1h aligned 90 ms 87 ms 239 ms 0.36×
E1 json duration_ms sum by service 1h defaults 106 ms 93 ms 252 ms 0.37×
E1 json duration_ms sum by service 1h aligned 109 ms 95 ms 196 ms 0.48×
E2 json duration_ms p95 by service 1h defaults 178 ms 199 ms 251 ms 0.79×
E2 json duration_ms p95 by service 1h aligned 182 ms 194 ms 231 ms 0.84×
E3 logfmt latency_ms rate, production 1h defaults 262 ms 264 ms 1.29 s 0.20×
E3 logfmt latency_ms rate, production 1h aligned 268 ms 263 ms 1.07 s 0.25×
E4 logfmt size_bytes max by service 1h defaults 49 ms 49 ms 534 ms 0.09×
E4 logfmt size_bytes max by service 1h aligned 51 ms 46 ms 215 ms 0.21×
E5 json duration_ms sum, instant instant defaults 29 ms 30 ms 29 ms 1.03×
E6 logfmt ttl unit string (Loki 400) 1h defaults 61 ms (400) 59 ms (400) 19 ms (400) —
E6 logfmt ttl unit string (Loki 400) 1h aligned 61 ms (400) 61 ms (400) 16 ms (400) —
E7 json hexadecimal trace_id (Loki 400) 1h defaults 78 ms (400) 60 ms (400) 27 ms (400) —
E7 json hexadecimal trace_id (Loki 400) 1h aligned 59 ms (400) 63 ms (400) 24 ms (400) —
E8 json duration_ms sum by service, namespace prod 1h defaults 216 ms 211 ms 903 ms 0.23×
E8 json duration_ms sum by service, namespace prod 1h aligned 219 ms 212 ms 718 ms 0.30×
E9 logfmt latency_ms sum by service, namespace prod 1h defaults 183 ms 175 ms 881 ms 0.20×
E9 logfmt latency_ms sum by service, namespace prod 1h aligned 184 ms 177 ms 795 ms 0.22×
G1 logfmt amount sum_over_time, no filter 1h defaults 60 ms 36 ms 60 ms 0.60×
G1 logfmt amount sum_over_time, no filter 1h aligned 43 ms 36 ms 56 ms 0.64×
G10 logfmt latency_ms sum_over_time, production 1h defaults 265 ms 242 ms 1.01 s 0.24×
G10 logfmt latency_ms sum_over_time, production 1h aligned 305 ms 248 ms 1.00 s 0.25×
G11 logfmt amount sum_over_time, instant instant defaults 8 ms 7 ms 13 ms 0.54×
G12 json duration_ms sum_over_time, instant instant defaults 59 ms 38 ms 32 ms 1.19×
G2 json duration_ms sum_over_time, no filter 1h defaults 96 ms 94 ms 212 ms 0.44×
G2 json duration_ms sum_over_time, no filter 1h aligned 99 ms 101 ms 189 ms 0.53×
G3 logfmt amount sum_over_time, error filter 1h defaults 43 ms 42 ms 61 ms 0.69×
G3 logfmt amount sum_over_time, error filter 1h aligned 42 ms 44 ms 57 ms 0.77×
G4 json duration_ms sum_over_time, error filter 1h defaults 52 ms 50 ms 225 ms ↺ 0.22×
G4 json duration_ms sum_over_time, error filter 1h aligned 51 ms 51 ms 241 ms ↺ 0.21×
G5 logfmt amount sum by rate 1h defaults 9 ms 10 ms 59 ms ↺ 0.17×
G5 logfmt amount sum by rate 1h aligned 10 ms 12 ms 63 ms ↺ 0.19×
G6 json duration_ms sum by rate 1h defaults 105 ms 94 ms 206 ms 0.46×
G6 json duration_ms sum by rate 1h aligned 93 ms 96 ms 155 ms 0.62×
G7 duration() of a unit string 1h defaults 47 ms 47 ms 90 ms 0.52×
G7 duration() of a unit string 1h aligned 47 ms 51 ms 53 ms 0.96×
G8 bytes() of a number 1h defaults 42 ms 44 ms 45 ms 0.98×
G8 bytes() of a number 1h aligned 47 ms 43 ms 34 ms 1.26×
G9 json duration_ms max_over_time 1h defaults 115 ms 95 ms 1.95 s 0.05×
G9 json duration_ms max_over_time 1h aligned 106 ms 98 ms 1.42 s 0.07×
W1 sum without pod, max_over_time 1h defaults 83 ms 87 ms 82 ms 1.06×
W1 sum without pod, max_over_time 1h aligned 77 ms 71 ms 93 ms 0.76×
W2 sum without pod, sum_over_time 1h defaults 68 ms 68 ms 77 ms 0.88×
W2 sum without pod, sum_over_time 1h aligned 73 ms 76 ms 75 ms 1.01×
W3 sum without pod, rate 1h defaults 90 ms 80 ms 80 ms 1.00×
W3 sum without pod, rate 1h aligned 81 ms 81 ms 70 ms 1.16×
W4 max without pod, max_over_time 1h defaults 29 ms 37 ms 86 ms 0.43×
W4 max without pod, max_over_time 1h aligned 28 ms 29 ms 81 ms 0.36×
W5 sum without pod, max_over_time, instant instant defaults 8 ms 7 ms 15 ms 0.47×
W6 sum without pod, rate, instant instant defaults 7 ms 7 ms 14 ms 0.50×
W7 topk 5 of sum without pod 1h defaults 34 ms 28 ms 163 ms 0.17×
W7 topk 5 of sum without pod 1h aligned 28 ms 28 ms 93 ms 0.30×
W8 sum without pod, count_over_time (production) 1h defaults 180 ms 158 ms 576 ms 0.27×
W8 sum without pod, count_over_time (production) 1h aligned 158 ms 189 ms 710 ms 0.27×
W9 label_replace control, instant instant defaults 7 ms 7 ms 96 ms 0.07×
U1 logfmt amount rate 1h defaults 46 ms 39 ms 54 ms 0.72×
U1 logfmt amount rate 1h aligned 48 ms 41 ms 59 ms 0.69×
U2 json duration_ms rate 1h defaults 116 ms 147 ms 171 ms 0.86×
U2 json duration_ms rate 1h aligned 91 ms 87 ms 152 ms 0.57×
U3 json duration_ms rate, error filter 1h defaults 91 ms 87 ms 180 ms 0.48×
U3 json duration_ms rate, error filter 1h aligned 91 ms 89 ms 167 ms 0.53×
U4 logfmt latency_ms rate, production 1h defaults 359 ms 356 ms 971 ms 0.37×
U4 logfmt latency_ms rate, production 1h aligned 354 ms 363 ms 1.00 s 0.36×
U5 logfmt amount rate, instant instant defaults 7 ms 7 ms 14 ms 0.50×
U6 json duration_ms rate, instant instant defaults 15 ms 12 ms 31 ms 0.39×
U7 json duration_ms sum_over_time, instant instant defaults 30 ms 14 ms 24 ms 0.58×
U8 logfmt amount rate by service (grouped) 1h defaults 38 ms 48 ms 59 ms 0.81×
U8 logfmt amount rate by service (grouped) 1h aligned 35 ms 36 ms 63 ms 0.57×
U9 logfmt amount rate_counter (folded per series) 1h defaults 52 ms 68 ms 350 ms † —
U9 logfmt amount rate_counter (folded per series) 1h aligned 53 ms 53 ms 395 ms † —
U1 json duration_ms sum by service 1h defaults 104 ms 91 ms 227 ms 0.40×
U1 json duration_ms sum by service 1h aligned 98 ms 113 ms 276 ms 0.41×
U10 instant sum_over_time unwrap instant defaults 38 ms 47 ms 33 ms 1.42×
U11 instant max_over_time missing label instant defaults 10 ms 9 ms 16 ms † —
U12 json duration_ms over every service 1h defaults 254 ms 252 ms 725 ms 0.35×
U12 json duration_ms over every service 1h aligned 250 ms 247 ms 822 ms 0.30×
U13 logfmt latency_ms over every service 1h defaults 469 ms 475 ms 1.04 s 0.46×
U13 logfmt latency_ms over every service 1h aligned 472 ms 476 ms 1.42 s 0.34×
U14 duration() of a unit string 1h defaults 59 ms 61 ms 51 ms 1.20×
U14 duration() of a unit string 1h aligned 60 ms 61 ms 47 ms 1.30×
U2 json duration_ms max by service 1h defaults 91 ms 109 ms 702 ms 0.16×
U2 json duration_ms max by service 1h aligned 92 ms 89 ms 1.15 s 0.08×
U3 json duration_ms sliding sum 1h defaults 8 ms 7 ms 225 ms 0.03×
U3 json duration_ms sliding sum 1h aligned 7 ms 7 ms 241 ms 0.03×
U4 logfmt size_bytes sum by service 1h defaults 53 ms 47 ms 45 ms 1.04×
U4 logfmt size_bytes sum by service 1h aligned 46 ms 47 ms 52 ms 0.90×
U5 logfmt ttl unit string (no sample) 1h defaults 43 ms 43 ms 41 ms † —
U5 logfmt ttl unit string (no sample) 1h aligned 44 ms 43 ms 53 ms † —
U6 missing label, no parser 1h defaults 52 ms 49 ms 79 ms † —
U6 missing label, no parser 1h aligned 49 ms 48 ms 94 ms † —
U7 missing label, ungrouped sum 1h defaults 15 ms 14 ms 74 ms † —
U7 missing label, ungrouped sum 1h aligned 14 ms 14 ms 91 ms † —
U8 rate of an unwrapped label 1h defaults 87 ms 108 ms 193 ms 0.56×
U8 rate of an unwrapped label 1h aligned 90 ms 88 ms 221 ms 0.40×
U9 bytes() conversion 1h defaults 64 ms 63 ms 49 ms 1.29×
U9 bytes() conversion 1h aligned 63 ms 64 ms 54 ms 1.19×

† Loki's results cache answered this cold run (its own counters, or identical answers for windows a minute apart): not a computed time, so it is in no ratio.

↺ Loki cold taken from the first set that ran the same query; Loki's cache answered this one.

8 shape×range above 2× Loki already (listed, or not moved by this PR: as slow on the base build)
profile mode shape range PR Loki PR ÷ Loki base ÷ Loki listed ÷ Loki why
known defaults warm LF2 logs, detected_level regexp 1h 108 ms 31 ms 3.48× 3.45× — as slow on base
known defaults cold LF5 logs, plain-text service, detected_level regexp 1h 78 ms 17 ms 4.59× 4.12× — as slow on base
known defaults cold LF10 drilldown logs, level pill multi-select, json service 1h 100 ms 36 ms 2.78× 2.75× — as slow on base
known defaults warm LF10 drilldown logs, level pill multi-select, json service 1h 93 ms 35 ms 2.66× 2.71× — as slow on base
known defaults cold P2 api-gateway not empty pattern, line filter 1h 83 ms 31 ms 2.68× 2.06× — within noise of base
known aligned cold E7 json count by level_extracted 1h 345 ms 153 ms 2.25× 2.28× — as slow on base
known defaults cold LS8 json count by level_extracted, collision 1h 322 ms 137 ms 2.35× 2.39× — as slow on base
known aligned cold LS8 json count by level_extracted, collision 1h 329 ms 144 ms 2.28× 2.29× — as slow on base

6 shape×range×mode where Loki did not answer 200: not compared (not a proxy defect).

Why these shapes
  • internal/translator/translator.go → 250: aggregation-over-binary/B1 sum by over rate divided by a literal, aggregation-over-binary/B2 sum by over a ratio of two per-stream metrics, aggregation-over-binary/B3 sum over a literal times count, instant, aggregation-over-binary/B4 outer sum over ignoring(machine), control/bytes_over_time by app, control/detected_level volume, control/drilldown detected_level, control/drilldown level volume …
  • internal/proxy/http_utils.go → 56: drilldown-breakdown-exact/DB1 label breakdown pod, drilldown-breakdown-exact/DB2 label breakdown namespace, drilldown-breakdown-exact/DB3 json field breakdown user_id, drilldown-breakdown-exact/DB4 json field breakdown batch_id, extracted-suffix/E1 logs, json parser over stream labels, extracted-suffix/E2 logs, logfmt parser over stream labels, extracted-suffix/E3 logs, json, existence filter on level_extracted, extracted-suffix/E4 logs, logfmt, existence filter on level_extracted …
  • control smoke → 8: control/drilldown service landing, control/instant ungrouped rate, control/json rate by level (no filter, no drop), control/json volume no filters, control/logs plain, control/logs | json, control/stream-label count by app, control/topk rate by app

base dddbe51991 → PR 0085ac3f00 · 4 runs (first is cold), warm p50 · ranges 1h · noise ±30% and 100 ms · VictoriaLogs restarts per shard 0→0, 0→0, 0→0, 0→0 · 12.9 min (slowest of 4 shards) · phases stack_up 35s, seed_and_build 123s, loki-defaults:loki_profile 0s, loki-defaults:proxies 2s, loki-defaults:warm_up 4s, loki-defaults:matrix 302s, aligned:loki_profile 38s, aligned:proxies 2s, aligned:warm_up 4s, aligned:matrix 250s. Each shard on its own runner and fresh stack, the three targets of a shape always on the same one, targets interleaved per request. How to read and reproduce: bench/ab/README.md.

…rites them

The oracle returns Loki's tree as JSON, which writes each byte that is not
UTF-8 as U+FFFD, so the proxy's value is compared in that form.
@szibis
szibis merged commit 6c1dc8f into main Nov 9, 2026
29 checks passed
@szibis
szibis deleted the docs/line-filter-invalid-utf8-case branch November 9, 2026 10:52
@github-actions github-actions Bot added size/XL Extra large change bugfix Bug fix and removed size/XL Extra large change labels Nov 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Bug fix documentation Documentation scope/docs Documentation scope/proxy Proxy core scope/tests Tests scope/translator LogQL translator size/XL Extra large change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant